Рекурсивный поиск и удаление в массиве?

Я работаю с многомерным массивом, я хочу иметь возможность удалить массив (и все дочерние элементы), которые соответствуют идентификатору.

Функция, которую я пробовал:

function removeKey($key, $array, $childKey = 'children'){ if(isset($array[$key])){ unset($array[$key]); return $array; } foreach($array as &$item) if(isset($item[$childKey])) $item = removeKey($key, $item[$childKey], $childKey); return $array; } 

Мой массив примеров:

 Array ( [5] => Array ( [id] => 5 [parent_id] => [menu_title] => Drinks [page_title] => Drinks [status] => 1 [products] => 0 ) [1] => Array ( [id] => 1 [parent_id] => [menu_title] => Electronics [page_title] => Electronics [status] => 1 [products] => 0 [children] => Array ( [2] => Array ( [id] => 2 [parent_id] => 1 [menu_title] => Computers [page_title] => Computers [status] => 1 [products] => 0 [children] => Array ( [4] => Array ( [id] => 4 [parent_id] => 2 [menu_title] => Apple [page_title] => Apple - Imacs and Macbooks [status] => 1 [products] => 0 ) ) ) [3] => Array ( [id] => 3 [parent_id] => 1 [menu_title] => Mobile Phones [page_title] => Mobile Phones [status] => 1 [products] => 0 ) ) ) ) 

и результат, который я ищу (вызов функции с (2, $array, 'children') ):

 Array ( [5] => Array ( [id] => 5 [parent_id] => [menu_title] => Drinks [page_title] => Drinks [status] => 1 [products] => 0 ) [1] => Array ( [id] => 1 [parent_id] => [menu_title] => Electronics [page_title] => Electronics [status] => 1 [products] => 0 [children] => Array ( [3] => Array ( [id] => 3 [parent_id] => 1 [menu_title] => Mobile Phones [page_title] => Mobile Phones [status] => 1 [products] => 0 ) ) ) ) 

но результат, который я получаю,

     Array ( [5] => Array ( [id] => 5 [parent_id] => [menu_title] => Drinks [page_title] => Drinks [status] => 1 [products] => 0 ) [1] => Array ( [3] => Array ( [id] => 3 [parent_id] => 1 [menu_title] => Mobile Phones [page_title] => Mobile Phones [status] => 1 [products] => 0 ) ) ) 

    Я понятия не имею, что здесь происходит!

    Related of "Рекурсивный поиск и удаление в массиве?"

    Вы можете облегчить ситуацию, используя только ссылки.

     function removeKey($key, &$array, $childKey = 'children'){ if(isset($array[$key])){ unset($array[$key]); return; } foreach($array as &$item) if(isset($item[$childKey])) removeKey($key, $item[$childKey], $childKey); } с function removeKey($key, &$array, $childKey = 'children'){ if(isset($array[$key])){ unset($array[$key]); return; } foreach($array as &$item) if(isset($item[$childKey])) removeKey($key, $item[$childKey], $childKey); } 

    Пример:

     $arr = array(...); removeKey('key', $arr, $chilKey); // Just continue using $arr 

    Что относительно многомерного массива? Я был исследован на пару часов для этого решения, нигде не нашел оптимального решения. поэтому, я написал это сам

     function allow_keys($arr, $keys) { $saved = []; foreach ($keys as $key => $value) { if (is_int($key) || is_int($value)) { $keysKey = $value; } else { $keysKey = $key; } if (isset($arr[$keysKey])) { $saved[$keysKey] = $arr[$keysKey]; if (is_array($value)) { $saved[$keysKey] = allow_keys($saved[$keysKey], $keys[$keysKey]); } } } return $saved; } 

    использовать: пример

     $array = [ 'key1' => 'kw', 'loaa'=> ['looo'], 'k' => [ 'prope' => [ 'prop' => ['proo', 'prot', 'loolooo', 'de'], 'prop2' => ['hun' => 'lu'], ], 'prop1' => [ ], ], ]; 

    call: example

     allow_keys($array, ['key1', 'k' => ['prope' => ['prop' => [0, 1], 'prop2']]]) 

    вывод:

     Array ( [key1] => kw [k] => Array ( [prope] => Array ( [prop] => Array ( [0] => proo [1] => prot ) [prop2] => Array ( [hun] => lu ) ) ) ) 

    поэтому вы получаете только нужные ключи из многомерного массива. он не ограничивается только «многомерным», вы можете использовать его, передавая массив вроде

     ['key1', 'loaa'] 

    вы получаете:

     Array ( [key1] => kw [loaa] => Array ( [0] => looo ) ) 

    надеюсь, кто-то помогает этому, поскольку я много искал, и ничего не нашел. ура!