2015-05-15 6 views
2

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

В настоящее время мой массив выглядит так: ключ принадлежит parent_id папки.

array (size=3) 
    0 => 
    object(stdClass)[25] 
     public 'id' => string '18' (length=2) 
    18 => 
    array (size=3) 
     19 => 
     object(stdClass)[28] 
      public 'id' => string '19' (length=2) 
     20 => 
     object(stdClass)[29] 
      public 'id' => string '20' (length=2) 
     21 => 
     object(stdClass)[30] 
      public 'id' => string '21' (length=2) 
    19 => 
    array (size=1) 
     24 => 
     object(stdClass)[31] 
      public 'id' => string '24' (length=2) 

Что я пробовал:

function getChildren($folder_id) 
    { 
     $folder_cursor = $this->db->get_where("folder", array("id" => $folder_id)); 
     if ($folder_cursor->num_rows() > 0) { 
      $row = $folder_cursor->row(); 
      array_push($this->temp, $row); 
      $this->recursiveGetChildren($row->id); 
     } 
    } 

    function recursiveGetChildren($parent_id) 
    { 
     $q = $this->db->get_where("folder", array("parent" => $parent_id)); 
     if ($q->num_rows() > 0) { 
      $this->temp[$parent_id] = array(); 
      foreach($q->result() as $q) { 
       $this->temp[$parent_id][$q->id] = $q; 
       $this->recursiveGetChildren($q->id); 
      } 
     } 
    } 

Я хотел бы, чтобы массив выглядеть следующим образом:

array (size=3) 
    0 => 
    object(stdClass)[25] 
     public 'id' => string '18' (length=2) 
    18 => 
    array (size=3) 
     19 => 
     array (size=2) 
     0=> 
      object(stdClass)[28] 
       public 'id' => string '19' (length=2) 
     24 => 
      object(stdClass)[31] 
      public 'id' => string '24' (length=2) 
     20 => 
     object(stdClass)[29] 
      public 'id' => string '20' (length=2) 
     21 => 
     object(stdClass)[30] 
      public 'id' => string '21' (length=2) 

отредактированный для ясности.

+0

Можете ли вы быть более ясным о логике позади них? Если есть какая-либо логика, вы можете использовать многие прототипы массивов для достижения таких целей, вы можете даже ссылаться на значения массивов, если вам нужно, но вы не можете ссылаться на ключи. Возможная рекурсивная функция, которую вы можете использовать, - array_walk_recursive http://php.net/manual/en/function.array-walk-recursive.php, но она во многом зависит от логики. В любом случае ваш случай выглядит довольно сложно сделать в одной строке кода (или в одной функции), но array_walk_recursive может быть хорошей отправной точкой. – briosheje

+0

Я обновил OP для ясности. – acupajoe

+1

для вашего предыдущего случая, возможно решение (которое будет работать только в этом случае): http://sandbox.onlinephpfunctions.com/code/3edda6bd4fb2ac7fefab00385b5639d2f73ff74a. Это так просто, пока эта структура соблюдается. Вы можете отредактировать этот код и отрегулировать preg_match в соответствии с вашими собственными ключами и значениями, но это может быть хорошим примером для начала:) – briosheje

ответ

1

Ваша структура выглядит следующим образом:

array(
    "child_id" => array(
     "sub_child_id" => array(); 
    ), 
    "child_id_2" => array(
     "sub_child_id_2" => array(
      sub_sub_child_id => array(); 
     ); 
    ), 
); 

, которая предполагает следующее:

$array[ $a[ $aa[ ] ], $b[ $bb[ $bbb[ ] ] ] ] 

Тогда, похоже, для каждого массива, сам элемент является массивом массивов .. nth глубина

Пробег array_walk_recursive()):

<?php 
$sweet = array('a' => 'apple', 'b' => 'banana'); 
$fruits = array('sweet' => $sweet, 'sour' => 'lemon'); 

function test_print($item, $key) 
{ 
    echo "$key holds $item\n"; 
} 

array_walk_recursive($fruits, 'test_print'); 
?> 

Реализация:

+0

Вы смотрите на структуру, которую я хотел, а не на структуру, которую у меня есть – acupajoe

+1

ahh, ok. плохое обновление, как только я проверил на своей игровой площадке. Извинения. – daxeh

+0

Без проблем, спасибо за помощь! – acupajoe

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