|
|
|
| Здравствуйте.
Подскажите, пожалуйста.
Есть, например, такой массив:
Array
(
[660348] => Array
(
[660358] => 660358
[660357] => 660357
)
[660346] => Array
(
[660348] => 660348
)
[0] => Array
(
[660346] => 660346
[655769] => 655769
[654921] => 654921
)
[602560] => Array
(
[659624] => 659624
[602577] => 602577
)
)
|
задача стоит такая.
необходимо его отсортировать так, чтобы элементы массива, если их несколько, были в порядке убывания. Причём, если это [0] - то его не трогать..
Т.е. на выходе должен быть массив:
Array
(
[660348] => Array
(
[660357] => 660357
[660358] => 660358
)
[660346] => Array
(
[660348] => 660348
)
[0] => Array
(
[660346] => 660346
[655769] => 655769
[654921] => 654921
)
[602560] => Array
(
[602577] => 602577
[659624] => 659624
)
)
|
| |
|
|
|
|
|
|
|
для: Jaroslav
(28.06.2010 в 15:01)
| | во вложенных массивах (ключах и значениях) тоже может встречаться 0? и его тоже нужно не трогать? или 0 может быть только в ключах внешнего массива? | |
|
|
|
|
|
|
|
для: Valick
(28.06.2010 в 15:41)
| | во вложенных 0 - не может быть. Но сама вложенность может быть неограниченной. | |
|
|
|
|
|
|
|
для: Jaroslav
(28.06.2010 в 15:43)
| | кстати ключи внешнего массива у вас в порядке убывания, а ключи вложенного массива в порядке возростания, опеределитесь с заданием поконкретнее
точнее только первого, второй правильно... это просто ошибка? | |
|
|
|
|
|
|
|
для: Valick
(28.06.2010 в 15:46)
| | это не ошибка, так и должно быть.
Т.е. была рекурсия.
Обычно записи выводятся так:
- сообщение 1
- сообщение 2
- сообщение 3
----- сообщение 4
----- сообщение 5
- сообщение 6
- сообщение 7
----- сообщение 8
----- сообщение 9
----- сообщение 10
- сообщение 11
|
при этом последние сообщения первого уровня - внизу.
Необходимо, чтобы вывод был так:
- сообщение 11
- сообщение 7
----- сообщение 8
----- сообщение 9
----- сообщение 10
- сообщение 6
- сообщение 3
----- сообщение 4
----- сообщение 5
- сообщение 2
- сообщение 1
|
| |
|
|
|
|
|
|
|
для: Jaroslav
(28.06.2010 в 15:58)
| | т.о. нужно ключи внешнего массива отсортировать в порядке убывания, а ключи всех вложенных массивов в порядке возростания, так?
ноль следует просто оставлять на своем месте, а его содержимое оставлять как есть, так? | |
|
|
|
|
|
|
|
для: Valick
(28.06.2010 в 16:06)
| | вроде так. | |
|
|
|
|
|
|
|
для: Jaroslav
(28.06.2010 в 16:13)
| | Вы что не можете четко сформулировать правило сортировки?
Вы сами сказали что вложенность массива может быть неограничена, в первом посте это не отображено.
Если Вам впадлу ответить на наводящие вопросы, то делайте сами, а то у меня складывается впечатление, что это нужно мне а не Вам
И если быть до конца честным желание Вам помогать уже пропало. | |
|
|
|
|
|
|
|
для: Valick
(28.06.2010 в 16:21)
| | потому что вы неправильно пишите. А я уже объяснил 2 раза одно и тоже.
Надо так, чтобы если в одной категории (рубрике) - элементов больше 1, то их отсортировать в порядке возрастания. Если 1 элемент или это рубрика первого уровня с нулём, тогда ничего не трогать. И по первому посту это видно. | |
|
|
|
|
|
|
|
для: Jaroslav
(28.06.2010 в 16:25)
| | нулей я так понимаю может быть сколь угодно много?
____
потому что вы неправильно пишите
буду писать правильно как только научусь читать мысли ) | |
|
|
|
|
|
|
|
для: Valick
(28.06.2010 в 16:27)
| | торможу... не может быть... ноль может быть только один. | |
|
|
|
|
|
|
|
для: Valick
(28.06.2010 в 16:27)
| | нет, массив нулевого уровня только 1 (ОДИН).
Структура примерно такая:
Array
(
[660348] => Array
(
[660358] => 660358
[660357] => 660357
)
[660346] => Array
(
[660348] => 660348
)
[0] => Array
(
[660346] => 660346
[655769] => 655769
[654921] => 654921
)
[602560] => Array
(
[659624] => 659624
[602577] => 602577
)
)
|
вложенность может быть только 1-го и 2-го уровня. (писал неограниченная - ошибся, извиняюсь).
Задача такая. Если это массив 1-го уровня вложенности и не является [0], то элементы внутри него надо отсортировать в порядке возрастания. Понятно написал? :) | |
|
|
|
|
|
|
|
для: Jaroslav
(28.06.2010 в 16:40)
| |
<?
$a = array(
660348=>array(
660358 => 660358,
660357 => 660357
),
660346=>array(
660348 => 660348
),
0 => array(
660346 => 660346,
655769 => 655769,
654921 => 654921
),
602560=>array(
659624 => 659624,
602577 => 602577
)
);
foreach($a as $key=>$val) if($key) asort($a[$key]);
echo '<pre>';
print_r($a);
|
| |
|
|
|
|
|
|
|
для: sim5
(28.06.2010 в 16:51)
| | большое спасибо! | |
|
|
|
|
|
|
|
для: Jaroslav
(28.06.2010 в 16:57)
| | эттот код сортирует вложенные массивы, причем и нулевой элемент в том чилсе, оставляе внешний массив как есть.
или я уже сошёл с ума, но пока еще не смирился с этой мыслью? | |
|
|
|
|
|
|
|
для: Valick
(28.06.2010 в 17:07)
| | Массив с ключем равным 0 не сортируется. | |
|
|
|
|
|
|
|
для: sim5
(28.06.2010 в 17:09)
| | да верно
но внешний массив остается таким как и был | |
|
|
|
|
|
|
|
для: Valick
(28.06.2010 в 17:10)
| | А вам что надо? Как автор просил (по примеру чуть выше), так и отсортировано. | |
|
|
|
|
|
|
|
для: sim5
(28.06.2010 в 17:12)
| | мне ничего не надо... честно :)
если это то что нужно автору, то пусть так и будет
на всякий случай посмотрите пятый пост | |
|
|
|
|
|
|
|
для: Valick
(28.06.2010 в 17:13)
| | Если смотреть на пятый, то похоже взято из базы, а коли так, то сортировку задавать надо в запросе, и коли вычурную, то загодя определять ее в таблице. | |
|
|
|
|
|
|
|
для: sim5
(28.06.2010 в 17:19)
| | в задании у автора массив уже отсортированный в порядке убывания (не принимая во внимание ноль)
и вот слова автора
задача стоит такая.
необходимо его отсортировать так, чтобы элементы массива, если их несколько, были в порядке убывания. Причём, если это [0] - то его не трогать..
естественно я предположил, что входной массив может иметь произвольный порядок, в противном случае задание бы звучало совсем иначе. | |
|
|
|
|
|
|
|
для: sim5
(28.06.2010 в 17:19)
| | более того присмотритесть вот Ваш код
foreach($a as $key=>$val) if($key) asort($a[$key]);
а вот то что я написал словами | |
|
|
|
|
|
|
|
для: Valick
(28.06.2010 в 17:32)
| | Что вас не устраивает? | |
|
|
|
|
|
|
|
для: sim5
(28.06.2010 в 17:34)
| | все ладно, проехали... | |
|
|
|
|
|
|
|
для: Valick
(28.06.2010 в 17:32)
| | sim5 - подсказал всё правильно.. Работает идеально. И правильно написал, что массив взят из базы и изначально уже был отсортирован. | |
|
|
|
|
|
|
|
для: Jaroslav
(28.06.2010 в 17:39)
| | Так и сортируйте сразу в запросе, чтобы получать уже отсортированный ресурс. Если нужна нестандартная сортировака, то создайте поле, по которому и будет происходить сортировка.
Зачем же потом сортировать? | |
|
|
|
|
|
|
|
для: Jaroslav
(28.06.2010 в 17:39)
| | рботает-то он идеально, и даже более того работает так как хотели Вы, но не соответствует заданию которое Вы написали словами.
Я и начал задавать вопросы дополнительные, потому что словесное задание и пример массива не соответствовали друг другу | |
|
|
|
|
|
|
|
для: Jaroslav
(28.06.2010 в 16:40)
| | вся задача сводиться к определению положения нуля
пробегаемся по массиву, сортируя вложенные массивы в порядке возрастания стандартной функцией, находим и запоминаем порядковый номер с нулевым элементом массива (и не сортируем его).
потом так же сортируем стандартной функцией внешний массив в порядке убывания, нулевой элемент оказывается внизу
теперь задача сводиться к тому, чтобы поднять этот элемент на свое место...
стоп.... есть опять нюансы... это годиться для того случая если массив до этого был отсортирован по возростанию.... чет я слегка запарился | |
|
|
|