Удалить элемент из многомерного массива на основе ключа

Как удалить элемент из многомерного массива с помощью ключа?

Я надеюсь, что это будет жадным, так что он удалит все элементы в массиве, которые соответствуют ключам, которые я передаю. У меня есть это до сих пор, где я могу пересекать многомерный массив, но я не могу отключить ключ, который мне нужен потому что у меня нет ссылки на него!

function traverseArray($array, $keys) { foreach($array as $key=>$value) { if(is_array($value)) { traverseArray($value); } else { if(in_array($key, $keys)) { //unset(what goes here?) } } } } 

Следующий код работает (и не использует устаревшие вещи), просто протестировал его:

 function traverseArray(&$array, $keys) { foreach ($array as $key => &$value) { if (is_array($value)) { traverseArray($value, $keys); } else { if (in_array($key, $keys)){ unset($array[$key]); } } } } с function traverseArray(&$array, $keys) { foreach ($array as $key => &$value) { if (is_array($value)) { traverseArray($value, $keys); } else { if (in_array($key, $keys)){ unset($array[$key]); } } } } 

Вы можете использовать pass by reference, объявите свою функцию следующим образом:

 function traverseArray(&$array, $keys) { foreach($array as $key=>$value) { if(is_array($value)) { traverseArray($value, $keys); }else{ if(in_array($key, $keys)){ unset($array[$key]); } } } } с function traverseArray(&$array, $keys) { foreach($array as $key=>$value) { if(is_array($value)) { traverseArray($value, $keys); }else{ if(in_array($key, $keys)){ unset($array[$key]); } } } } 

то вы можете отменить ключ, и он исчезнет из исходного переданного значения, так как $array в этой функции является просто указателем на массив, который вы передали, чтобы он обновлял этот массив.

 unset($array[$key]); 

Для получения дополнительной информации проверьте документацию php по передаче по ссылке

Вы можете сделать это

 unset($array[$key]); 

потому что $array не будет копией исходного массива, просто ссылкой на него, поэтому любые изменения будут сохранены.

Кроме того, у вас есть небольшая ошибка в вашем фрагменте: когда вы делаете рекурсивный вызов, вы забываете пропустить параметр $keys .

и не забудьте изменить foreach:

 foreach($array as $key=>&$value)