[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Родители в массиве
Renden
Доброго времени, требуется помощь, я что-то сообразить не могу, вроде все кажется банально но не идет, суть в том что есть массив, и когда у него вложенные элементы прибавляются то родителям является предыдуший элемент.
Т.е инбокс родитель у всех, папка ИТ родитель папки Тест, я думаю понятно. Как бы собрать его в нормальный массив чтоб сделать древовидное меню, для этого нужено знать родителя, как его вычислить?

Array
(
[0] => Array
(
[0] => INBOX
)

[1] => Array
(
[0] => INBOX
[1] => Sent
)

[2] => Array
(
[0] => INBOX
[1] => Trash
)

[3] => Array
(
[0] => INBOX
[1] => Drafts
)

[4] => Array
(
[0] => INBOX
[1] => ИТ
)

[5] => Array
(
[0] => INBOX
[1] => ИТ
[2] => Test
)

)




Спустя 5 минут, 4 секунды (23.05.2012 - 16:06) Игорь_Vasinsky написал(а):
 $category = array(
'INBOX'=> array(
'child1',
'child2'
),
'NO INBOX'=> array(
'child1',
'child2',
'child3'
)
);

echo '<pre>' . print_r($category, 1) . '</pre>';


Array
(
[INBOX] => Array
(
[0] => child1
[1] => child2
)

[NO INBOX] => Array
(
[0] => child1
[1] => child2
[2] => child3
)

)


foreach($category as $key=>$value)
{
echo $key.'<br />';

foreach($value as $child)
{
echo ' -'.$child.'<br />';
}
}


INBOX
-child1
-child2
NO INBOX
-child1
-child2
-child3

Спустя 3 минуты, 27 секунд (23.05.2012 - 16:09) Renden написал(а):
Игорь_Vasinsky
Чет я не понял чем это поможет, сорри лег в 6 утра, с комметариями пожалуйста.

Смотри я пробывал так:

$menu_array = array();
foreach($list_folders AS $key => &$value) {
foreach($value['nameA'] AS $vKey => $vVal)
$menu_array[$vKey][$key] = $vVal;
}

Результат:

Array
(
[0] => Array
(
[0] => INBOX
[1] => INBOX
[2] => INBOX
[3] => INBOX
[4] => INBOX
[5] => INBOX
)

[1] => Array
(
[1] => Sent
[2] => Trash
[3] => Drafts
[4] => ИТ
[5] => ИТ
)

[2] => Array
(
[5] => Test
)

)

А по логике надо чтоб было как-то так:

Array
(
[0] => Array
(
[1] => INBOX
)

[1] => Array
(
[1] => Sent
[2] => Trash
[3] => Drafts
[5] => ИТ
)

[5] => Array
(
[6] => Test
)

)

Спустя 1 минута, 28 секунд (23.05.2012 - 16:11) Игорь_Vasinsky написал(а):
ты спросил удобную структуру parent->child

вообще можно легко функцию написать для листинга массивов с любым уровнем вложенности. данный пример на 2у-мерном массиве, но могут быть же и подкатегории.

Спустя 35 минут, 52 секунды (23.05.2012 - 16:47) Renden написал(а):
Игорь_Vasinsky
Цитата
ты спросил удобную структуру parent->child

Я спросил как вычислить родителя, функцию я думаю напишу, просто как пересобрать массив чтоб там было указано кто родитель?

Спустя 21 час, 36 минут, 59 секунд (24.05.2012 - 14:24) Renden написал(а):
Ребят нет идей как можно?

Спустя 1 день, 1 час, 46 минут, 12 секунд (25.05.2012 - 16:10) Arh написал(а):
#Твой массив
$array = array (
'0'=> array (
'0'=>'INBOX',
'1'=>'ololo'
),
'1'=> array (
'0'=>'INBOX',
'1'=>'Send'
),
'2'=> array (
'0'=>'INBOX',
'1'=>'Trash'
),
'3'=> array (
'0'=>'INBOX',
'1'=>'Drafts'
),
'4'=> array (
'0'=>'INBOX',
'1'=>'ИТ'
),
'5'=> array (
'0'=>'INBOX',
'1'=>'ИТ',
'2'=>'Test'
)
);

print_r($array);

#Попытка один
$dir[$array['0']['0']] = array();
foreach ($array as $key => $value) {
if ($key != '0') {
foreach ($array[$key] as $k => $v) {
if ($k > '0' && $k < '2' && array_search($array[$key][$k],$dir[$array['0']['0']]) != true) {
$dir[$array['0']['0']][] = $array[$key][$k];
} elseif ($k > '1') {
$id = array_search ($array[$key][$k-1],$dir[$array['0']['0']]);
$dir[$array[$key][$k-1]][] = $array[$key][$k];
}
}
}
}


print_r($dir);
unset($dir);

#Попытка два
$dir[$array['0']['0']] = array();
foreach ($array as $key => $value) {
if ($key != '0') {
foreach ($array[$key] as $k => $v) {
if ($k > '0' && $k < '2' && array_search($array[$key][$k],$dir[$array['0']['0']]) != true) {
$dir[$array['0']['0']][$array[$key][$k]] = null;
} elseif ($k > '1') {
$id = array_search ($array[$key][$k-1],$dir[$array['0']['0']]);
$dir[$array['0']['0']][$array[$key][$k-1]] = $array[$key][$k];

}
}
}
}


print_r($dir);


Код работает чисто под твой случай, во всех остальных случаях - убежит с криками <_<
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.