Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите упорядочить массив
 
 автор: Tamplier   (12.08.2010 в 13:45)   письмо автору
 
 

Есть массив элементов, которые нужно отсортировать в нужном порядке, объяснить сложно приведу пример. Вот этот массив:


Array
(
    [0] => Array
        (
            [0] => 14
            [1] => 15
            [2] => 16
            [3] => 23
            [4] => 24
        )

    [15] => Array
        (
            [0] => 20
            [1] => 21
            [2] => 22
        )

    [23] => Array
        (
            [0] => 29
            [1] => 31
            [2] => 30
        )

    [31] => Array
        (
            [0] => 32
            [1] => 33
            [2] => 34
        )

    [34] => Array
        (
            [0] => 35
            [1] => 36
        )

)


Нужно отсортировать так:


array(14, 15, array(20, 21, 22), 16, 23, array(29, 31, array(32, 33, 34, array(35, 36)), 30), 24)


То есть чтобы дочерние массивы находились сразу за элементами с номерами совпадающими с номерами дочерних массивов. Сумбурно наверное объяснил, но мысли вобще в разные стороны разбежались...

  Ответить  
 
 автор: Саня   (12.08.2010 в 14:19)   письмо автору
 
   для: Tamplier   (12.08.2010 в 13:45)
 

Нифига непонятно.

  Ответить  
 
 автор: Tamplier   (12.08.2010 в 14:23)   письмо автору
 
   для: Саня   (12.08.2010 в 14:19)
 

Ну то есть выбрать из многомерного массива все вложенные массивы кроме нулевого и разместить их сразу за значениями с соответствующим номером (оговорюсь сразу номера уникальные т.е не повторяются). То есть массив 15 разместить за значением 15, массив 34 за значением 34 и т.д.

  Ответить  
 
 автор: Саня   (12.08.2010 в 14:19)   письмо автору
 
   для: Tamplier   (12.08.2010 в 13:45)
 

.

  Ответить  
 
 автор: sim5   (12.08.2010 в 14:25)   письмо автору
 
   для: Tamplier   (12.08.2010 в 13:45)
 

>То есть чтобы дочерние массивы находились сразу за элементами с номерами совпадающими

А вы сами то сможете объяснить по каким признакам 20, 21, 22 являются дочерями и кому?

  Ответить  
 
 автор: Tamplier   (12.08.2010 в 14:29)   письмо автору
 
   для: sim5   (12.08.2010 в 14:25)
 

Здесь есть массивы 15, 23, 31, 34 их нужно разместить сразу за значениями 15, 23, 31, 34 чтобы получилось иерархическое дерево вложенных массивов. Вобще это сортировка меню.

  Ответить  
 
 автор: sim5   (12.08.2010 в 14:36)   письмо автору
 
   для: Tamplier   (12.08.2010 в 14:29)
 

Сортировку элементов меню нужно производить в запросе к базе, где еще понятна "дочерность", а в вашем массиве ее и близко нет. Чтобы что-то чему-то пренадлежало, это что-то должно быть чему-то подчинено.

  Ответить  
 
 автор: Tamplier   (12.08.2010 в 14:48)   письмо автору
 
   для: sim5   (12.08.2010 в 14:36)
 

Вот как составить такой запрос к БД вся и загвоздка. таблица выглядит так: id | id_key | sub_menu

id - номер ссылки
id_key - порядок сортировки
sub_menu - номер подменю соответствующий номеру пункта меню

Туплю как вывести id деревом

  Ответить  
 
 автор: sim5   (12.08.2010 в 14:49)   письмо автору
 
   для: Tamplier   (12.08.2010 в 14:48)
 

Это вопрос другого раздела - MySQL.

  Ответить  
 
 автор: Красная_шляпа   (12.08.2010 в 14:34)   письмо автору
 
   для: Tamplier   (12.08.2010 в 13:45)
 

Я понял шо нужно по первой колонке



// <?php
// пусть $a - исходный массив
$a0 = array();
foreach (
$a as $k => $v) {
$a0[$k] = $v[0];
}
asort($a0);
$a0 array_keys($a0);
echo 
"<pre>";
foreach(
$a0 as $v) {
echo 
print_r($a[$v],1)."\n";
}

  Ответить  
 
 автор: Tamplier   (12.08.2010 в 14:41)   письмо автору
 
   для: Красная_шляпа   (12.08.2010 в 14:34)
 

Вот тут оно выводится отдельными массивами, а необходимо правильно расставить массивы за соответствующими значениями.

  Ответить  
 
 автор: Красная_шляпа   (12.08.2010 в 14:45)   письмо автору
 
   для: Tamplier   (12.08.2010 в 14:41)
 

Я не то написал, что требуется в твоем случае я так и не понял

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования