Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: PHP Как одномерные массивы перегнать в многомерный? [решено]
цитата
01/02/13 в 10:01
 alexxxus
Есть вложенные категории в одномерных массивах,
где ключ соответствует уровню вложенности:

$A = array (
'0' => 'porn',
'1' => 'pics',
'2' => 'gifs'
);

$B = array (
'0' => 'porn',
'1' => 'movs',
'2' => 'avi'
);


Не являюсь профи в РНР, подскажите, пожалуйста, как перегнать это
дело во вложенный массив? Может быть есть такие функции в РНР?

Должно быть такое (ключи, соответственно, должны перекрываться, в
данном случае категория porn содержит две подкатегории pics и movs):

array $С
['porn']['pics']['gifs']
['porn']['movs']['avi']


Спасибо.

Последний раз редактировалось: alexxxus (01/02/13 в 11:47), всего редактировалось 2 раз(а)
цитата
01/02/13 в 10:31
 johndoe2
По сути не может быть такого, что индексы в $A или $B начинаются не с 0, или между индексами есть пропуски. Поэтому принудительная индексация не нужна, $A и $B - просто списки.

Код:
$A = array (
   'porn', 'pics', 'gifs'
);

$B = array (
   'porn', 'movs', 'avi'
);

function merge_into( &$C, $a){
   $p =& $C;
   foreach ($a as $v){
      if (!array_key_exists($v,$p)) $p[$v] = array();
      $p =& $p[$v];
   }
}

$C = array();
merge_into($C,$A);
merge_into($C,$B);

print_r($C);
цитата
01/02/13 в 10:59
 Yacc
Код:
$a = [
    ['porn', 'pics',  'gifs', 1],
    ['porn', 'pics',  'jpg', 2],
    ['porn', 'pics',  'jpg', 3],
    ['porn', 'movs',  'flv', 4],
    ['porn', 'movs',  'avi', 5],
    ['not porn', 'pics',  'gifs', 6]
];

$b = [];

foreach($a as $c) {
    if( ! isset($b[$c[0]]))
        $b[$c[0]] = [];
    if( ! isset($b[$c[0]][$c[1]]))
        $b[$c[0]][$c[1]] = [];
    if( ! isset($b[$c[0]][$c[1]][$c[2]]))
        $b[$c[0]][$c[1]][$c[2]] = [];
    $b[$c[0]][$c[1]][$c[2]][] = $c[3];
}

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

/*
$b = [
    'porn' => [
        'pics' => [
            'gifs' => [1]
            'jpg' => [2, 3]
        ],
        'movs' => [
            'flv' => [4]
            'avi' => [5]
        ]
    ],
    'not porn' => [
        'pics' => [
            'gifs' => [6]
        ]
    ]
]
*/
цитата
01/02/13 в 11:23
 alexxxus
Класс. Огромное спасибо за помощь. Оценки максимальные выставил всем.


Эта страница в полной версии