2012-02-25 2 views
1

У меня есть многомерный массив (упрощенный):PHP прибудет подмножество из многоуровневого массива

[1] => Array 
    (
     [id] => 1 
     [id1] => 0 
    ) 
[2] => Array 
    (
     [id] => 2 
     [id1] => 0 
     [children] => Array 
      (
       [1001] => Array 
        (
         [id] => 1001 
         [id1] => 2 
        ) 
      ) 
    ) 
[3] => Array 
    (
     [id] => 3 
     [id1] => 0 
     [children] => Array 
      (
       [1002] => Array 
        (
         [id] => 1002 
         [id1] => 2 
         [children] => Array 
          (
           [1002] => Array 
            (
             [id] => 1002 
             [id1] => 2 
            ) 
           [1003] => Array 
            (
             [id] => 1003 
             [id1] => 2 
            ) 
          ) 
        ) 
       [1003] => Array 
        (
         [id] => 1003 
         [id1] => 2 
        ) 
      ) 
    ) 

Я хотел бы, чтобы выбрать ее часть (как массив), со всеми детьми, прикрепленных к нему.

Пример 1 (позиция 3, бесконечная глубина):

$result = getArrayKey(3, $dept = 0); 

[3] => Array 
    (
     [id] => 3 
     [id1] => 0 
     [children] => Array 
      (
       [1002] => Array 
        (
         [id] => 1002 
         [id1] => 2 
         [children] => Array 
          (
           [1002] => Array 
            (
             [id] => 1002 
             [id1] => 2 
            ) 
           [1003] => Array 
            (
             [id] => 1003 
             [id1] => 2 
            ) 
          ) 
        ) 
       [1003] => Array 
        (
         [id] => 1003 
         [id1] => 2 
        ) 
      ) 

Пример 2 (позиция 3, отдел 1):

$result = getArrayKey(3, $dept = 1); 

[3] => Array 
    (
     [id] => 3 
     [id1] => 0 
    ) 

Пример 3 (позиция 3, бесконечная глубина):

$result = getArrayKey(1002, $dept = 0); 

[1002] => Array 
    (
     [id] => 1002 
     [id1] => 2 
     [children] => Array 
      (
       [1002] => Array 
        (
         [id] => 1002 
         [id1] => 2 
        ) 
       [1003] => Array 
        (
         [id] => 1003 
         [id1] => 2 
        ) 
      ) 
    ) 

Я могу пройтись по этому массиву и сохранить необходимые уровни в новом массиве, я думаю, но есть ли более простой способ сделать это?

ответ

2

Вам нужно будет написать рекурсивную функцию, которая выполняет итерацию по всему массиву и перетаскивает глубину, чтобы решить для каждого подматрица, если он должен быть включен в результат. Использование 0 для «всего» крайне нецелесообразно. В моем решении вы либо не даете глубины, либо используете отрицательное значение для извлечения всего.

function getSubArray (array $array, $key, $depth = -1) { 
    $result = array(); 
    foreach ($array[$key] as $k => $v) { 
     if (is_array($v) && ($depth != 0)) { 
      $result[$k] = getSubArray($array[$key], $k, ($depth - 1)); 
     } else { 
      $result[$k] = $v; 
     } 
    } 
    return $result; 
} 
+1

Да ... Я видел это слишком поздно. Огромные блоки кода меня путают. ;) Я уже изменил свой ответ. –

+0

Можете ли вы сделать небольшое редактирование, чтобы я мог удалить нижний предел? : P – Lix

+0

Несомненно. Благодарю. ;) –

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