Сбросить ключи массива в многомерном массиве

Я искал решения для этого без реального успеха. У меня есть многомерный массив родителей и детей без ограничений по глубине. Это создается из базы данных, но проблема в том, что идентификатор элемента становится ключом, используя мой способ размещения плоского массива в многомерном массиве, например:

Array( [28] => Array ( [id] => 28 [color] => #ff24e5 [name] => Personal [parent_id] => [children] => Array ( [23] => Array ( [id] => 23 [color] => #41c3a3 [name] => Shopping [parent_id] => 28 [children] => Array ( [22] => Array ( [id] => 22 [color] => #8be32b [name] => Deals [parent_id] => 23 [children] => Array ( ) ) ) ) [150] => Array ( [id] => 150 [color] => #e9a3f0 [name] => Orders [parent_id] => 28 [children] => Array ( ) ) ) ) ) 

Что бы я хотел, это функция, которая выполняет следующие действия:

 Array ( [0] => Array ( [id] => 28 [color] => #ff24e5 [name] => Personal [parent_id] => [children] => Array ( [0] => Array ( [id] => 23 [color] => #41c3a3 [name] => Shopping [parent_id] => 28 [children] => Array ( [0] => Array ( [id] => 22 [color] => #8be32b [name] => Deals [user_id] => 1 [selected] => 0 [parent_id] => 23 [children] => Array ( ) ) ) ) [1] => Array ( [id] => 150 [color] => #e9a3f0 [name] => Orders [parent_id] => 28 [children] => Array ( ) ) ) ) ) 

По существу, переназначайте ключи, начиная с 0. Я пробовал множество методов, но я предполагаю, что мне нужно найти рекурсивное решение, и когда я попробовал это, он уничтожил мой массив. Я читал функцию array_walk_recursive (), но я не совсем понимаю, что делать дальше. По сути, есть ли способ сбросить числовые ключи в многомерном массиве?

Спасибо за помощь!

 function fix_keys($array) { foreach ($array as $k => $val) { if (is_array($val)) $array[$k] = fix_keys($val); //recurse } return array_values($array); } 

Я пытался решить ту же проблему, вот код

 $array = array_values($array); 

Вам действительно нужно добавить условие is_numeric, чтобы остановить смешивание текстовых клавиш …

 function fix_keys($array) { foreach ($array as $k => $val) { if (is_array($val)) $array[$k] = $fix_keys($val); //recurse } if( is_numeric($k) ) return array_values($array); return $array; } 

Я сделал это вместо этого:

 function fix_keys($array) { $numberCheck = false; foreach ($array as $k => $val) { if (is_array($val)) $array[$k] = fix_keys($val); //recurse if (is_numeric($k)) $numberCheck = true; } if ($numberCheck === true) { return array_values($array); } else { return $array; } }