Как удалить элемент из многомерного массива с помощью ключа?
Я надеюсь, что это будет жадным, так что он удалит все элементы в массиве, которые соответствуют ключам, которые я передаю. У меня есть это до сих пор, где я могу пересекать многомерный массив, но я не могу отключить ключ, который мне нужен потому что у меня нет ссылки на него!
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)