2014-08-28 4 views
1

я получил массивы, как эта сборка на основе данных из базы данных, представляющих отдельные страниц СУСА:PHP Вставить массив в многомерный массив с помощью значения массива

$page = 

      Array 
     (
      [title] => mein produkt 
      [NavID] => 200 
      [parents] => Array 
       (
        [0] => 0 
        [1] => 3 
        [2] => 200 
       ) 

     ) 

И мне нужно, чтобы положить, что в другой многомерный массив как это представляющий карту сайта:

$map = 

    Array 
    (
     [NavID] => 0 
     [0] => Array 
      (
       [childs] => Array 
        (
         [1] => Array 
          (
           [title] => home 
           [NavID] => 1 
          ) 

         [2] => Array 
          (
           [title] => impressum 
           [NavID] => 2 
           [childs] => Array 
            (
             [100] => Array 
              (
               [title] => startseite 
               [NavID] => 100 
               [parents] => Array 
                (
                 [0] => 0 
                 [1] => 2 
                 [2] => 100 
                ) 

              ) 

            ) 

          ) 

         [3] => Array 
          (
           [title] => produkte 
           [NavID] => 3 
          ) 

        ) 

      ) 

    ) 

Как вы видите, я получил структуру массива в качестве значения массива на parents.

Так что я хотел бы сделать вручную ставит это как:

$map[0]['childs'][3]['childs'][200] = $page; 

Помещенный как я могу выбрать многомерный массив с моим значением массива $page['parents']?

Спасибо, что помогли мне.

+0

Используйте [array_keys()] (http://php.net/array_keys) для доступа к интер ключей массивов больше на – Be0wulf

+0

читать это, как: http://stackoverflow.com/questions/1019076/how -to-search-by-key-value-in-a-multidimensional-array-in-php –

ответ

1

Вы можете непосредственно использовать $page['parents'][KEY] в качестве ключей при доступе $map значения таким образом:

$map[$page['parents'][0]]['childs'][$page['parents'][1]]['childs'][$page['parents'][2]] = $page; 

По мере роста дерева, я действительно предлагаю, чтобы сократить его с прямой переменной:

$par = $page['parents']; 
$map[$par[0]]['childs'][$par[1]]['childs'][$par[2]] = $page; 

Чтобы динамически перейти на правильный узел, просто перейдите по родителям, используя ссылки:

$tmp = &$map; 
$first = true; 
foreach ($page['parents'] as $parent) { 
    if ($first) { // Quick workaround to skip the first node without 'childs' key 
    $tmp = &$tmp[$parent]; 
    $first = false; 
    continue; 
    } 
    $tmp = &$tmp['childs'][$parent]; 
} 
$tmp = $page; 
+0

Благодарим за подсказку. Но я не знаю, насколько глубока страница, поэтому, возможно, есть шесть родительских элементов. Я знаю, что могу использовать array_count, чтобы определить, сколько я получил. Но опять же, как я могу поместить это в одну строку, как ваш ответ? –

+0

Мне нужно создать этот указатель «$ map [$ par [0]] ['childs'] [$ par [1]] ['childs'] [$ par [2]]" программно. –

+0

@ da.eXecutoR Обновлен мой ответ, чтобы использовать ссылки/указатели, как вы хотите. – Sugar

Смежные вопросы