|
|
|
| Помогите отсортировать массив:
Array
(
[0] => 1
[1] => 1.1
[2] => 1.2
[3] => 1.3
[4] => 1.3.1
[5] => 1.3.2
[6] => 1.3.2.1
[7] => 1.3.2.2
[8] => 1.3.3
[9] => 1.3.4
[10] => 1.3.4.1
[11] => 1.3.4.2
[12] => 1.3.4.3
[13] => 1.3.4.4
[14] => 1.3.5
[15] => 1.3.6
[16] => 1.4
[17] => 1.5
[18] => 2
[19] => 2.1
[20] => 2.2
[21] => 2.3
[22] => 2.3.1
[23] => 2.3.2
[24] => 2.3.2.1
[25] => 2.3.2.2
[26] => 2.3.3
[27] => 2.3.4
[28] => 2.3.4.1
[29] => 2.3.4.2
[30] => 2.3.4.3
[31] => 2.3.4.4
[32] => 2.3.5
[33] => 2.3.6
[34] => 2.4
[35] => 2.5
)
|
По типу:
1
1.1
1.2
1.3
1.3.1
1.3.2
1.3.2.1
1.3.2.2
1.3.3
1.3.4
1.3.4.1
1.3.4.2
1.3.4.3
1.3.4.4
1.3.5
1.3.6
1.4
1.5
2
2.1
2.2
2.3
2.3.1
2.3.2
2.3.2.1
2.3.2.2
2.3.3
2.3.4
2.3.4.1
2.3.4.2
2.3.4.3
2.3.4.4
2.3.5
2.3.6
2.4
2.5
|
Функции НЕ приветствуются! | |
|
|
|
|
|
|
|
для: freeing
(31.01.2010 в 22:50)
| | сортировка массива - это изменение порядка следования его элементов.
У Вас что-то иное. | |
|
|
|
|
|
|
|
для: Trianon
(31.01.2010 в 22:55)
| | Хорошо - Отсортировать по ID, сути это не меняет | |
|
|
|
|
|
|
|
для: freeing
(31.01.2010 в 22:58)
| | Он у Вас отсортирован.
И по ключу, и по значению. | |
|
|
|
|
|
|
|
для: freeing
(31.01.2010 в 22:50)
| | Это называется не сортировка, а форматированный вывод.
<?
print '<pre>';
foreach ( $arr as $a ) {
print str_repeat("\t", substr_count($a, '.')).$a."\n";
}
|
О каких функциях идёт речь? | |
|
|
|
|
|
|
|
для: Саня
(01.02.2010 в 00:31)
| | Спасибо! Очень хороший пример но я видимо неправильно поставил задачу, мне необходимо из массива сделать многомерный массив, где 1.1 будет элементом 1 – 2.5.7 будет элементом 2.5
То есть:
Array
(
[1] => Array
(
[1.1] =>
[1.2] =>
[1.3] => Array
(
[1.3.1] =>
[1.3.2] => Array
(
[1.3.2.1] =>
[1.3.2.2] =>
)
[1.3.3] =>
[1.3.4] => Array
(
[1.3.4.1] =>
[1.3.4.2] =>
[1.3.4.3] =>
[1.3.4.4] =>
)
[1.3.5] =>
[1.3.6] =>
)
[1.4] =>
[1.5] =>
)
)
|
Есть такой вариант, но он читает длину строки, поэтому я не могу использовать 1.10, 1.11 – 3.4.55, 5.23.1 – то есть числа выше 9
<?php
$str = preg_replace("/\./isU", "", $string[1]);
foreach ($str as $key => $val)
{
$p = &$array;
for ($i = 0; $i++ < strlen($val);)
{
if (!is_array($p))
{
$p = array();
}
$p = &$p[substr($val, 0, $i)];
}
if (!is_array($p))
{
$p = $val;
}
}
$p = &$array;
print "<pre>";
print_r($p);
?>
|
| |
|
|
|
|
|
|
|
для: freeing
(01.02.2010 в 02:28)
| | В большинстве случаев многомерный массив не нужен. Вы можете обосновать необходимость такого массива? | |
|
|
|
|
|
|
|
для: Саня
(01.02.2010 в 09:37)
| | суть данного массива, и последующего его перебора, заключается в том что я имею и пытаюсь организовать группу имен и ссылок
есть массив вида:
$id он приведен выше
$nаme содержащий в себе имена страниц
$filе файл для дальнейшей загрузки содержимого страницы
$id который я обрабатываю указывает какая страница к какой относится
то есть, раздел, под раздел
$nаmе указывает какое имя использовать для request, проще говоря это псевдонимы для $id
$file указывает с какого файла с читать данные
и все это с рядом проверок на наличие записи, файлов....
так что уникальные имена вида 1.1, 1.1.1...
это наилучший вариант для распределение разделов и под разделов | |
|
|
|
|
|
|
|
для: freeing
(01.02.2010 в 17:02)
| | Я так и не понял чем дерево лучше списка в данном конкретном случае.
Если этот массив будет использован для вывода в браузер, то древовидная структура абсолютно не нужна. | |
|
|
|
|
|
|
|
для: Саня
(01.02.2010 в 17:13)
| | ну вот пример:
есть страница новости
имя страницы /news
файл с описанием 2.8.txt
есть станица новость 1
имя страницы /news/new1
файл с описанием 2.8.1.txt
то есть данный разбор $id необходим чтобы сделать правильный request:
http://test.com/news/
http://test.com/news/new1/
http://test.com/news/new2/
которые в свою очеред читают файлы:
2.8.txt
2.8.1.txt
2.8.2.txt
может я делаю что-то не так, приведи пример со списками если не сложно... | |
|
|
|
|
|
|
|
для: Саня
(01.02.2010 в 17:13)
| | так что за списки? | |
|
|
|
|
|
|
|
для: freeing
(01.02.2010 в 02:28)
| | Очень редкий пример задачи, которую, хотя она формально и не требует рекурсии, я всё же стал бы решать рекурсивным спуском. | |
|
|
|
|
|
|
|
для: Trianon
(01.02.2010 в 10:18)
| | не хотел бы использовать рекурсию и функции обратного вызова, это усложняет работу программы, я итак с трудом пошел на перебор массивов | |
|
|
|
|
|
|
|
для: freeing
(01.02.2010 в 17:39)
| | функции обратного вызова я применять не предлагал.
Про "усложняет работу программы" уместно говорить, сравнивая уже работающие (или хотя бы работоспособные) варианты. У Вас есть с чем сравнивать?
Или Вы про "усложняет работу программиста"? | |
|
|
|
|
|
|
|
для: Trianon
(02.02.2010 в 12:15)
| | Решение!
<?php
$string = array
(
"1",
"1.1",
"1.2",
"1.3",
"1.3.1",
"1.3.2",
"1.3.2.1",
"1.3.2.2",
"1.3.3",
"1.3.4",
"1.3.4.1",
"1.3.4.2",
"1.3.4.3",
"1.3.4.4",
"1.3.5",
"1.3.6",
"1.4",
"1.5",
"2",
"2.1",
"2.2",
"2.3",
"2.3.1",
"2.3.2",
"2.3.2.1",
"2.3.2.2",
"2.3.3",
"2.3.4",
"2.3.4.1",
"2.3.4.2",
"2.3.4.3",
"2.3.4.4",
"2.3.5",
"2.3.6",
"2.4",
"2.5",
);
foreach ($string as $key => $val)
{
$p = &$array;
$i = 0;
while($i = strpos($val.'.','.',$i + 1))
{
if (!is_array($p))
{
$p = array();
}
$p = &$p[substr($val, 0, $i)];
}
if (!is_array($p))
{
$p = $val;
}
}
$p = &$array;
print "<pre>";
print_r($p);
?>
|
| |
|
|
|
|
|
|
|
для: freeing
(02.02.2010 в 14:44)
| | Это не решение. Неопределенные переменные в коде. | |
|
|
|