Как правильно удалить элемент массива, если я использую переменную для хранения значения ключа, и почему в этом случае команда `unset($del)` не влияет на массив?
Чтобы удалить элемент из массива в PHP, вы можете использовать функцию `unset()`, которая принимает в качестве аргумента ссылку на элемент массива. Важно понимать, что `unset()` должна быть вызвана на самом массиве, а не на переменной, которая хранит ключ. Вот пример, как правильно удалить элемент из массива: ```php $array = ['apple', 'banana', 'cherry']; $key = 1; // Ключ, который мы хотим удалить (в данном случае 'banana') // Удаляем элемент массива по ключу unset($array[$key]); print_r($array); // Результат: Array ( [0] => apple [2] => cherry ) ``` Если вы используете переменную для хранения значения ключа, то вам нужно передавать именно массив и ключ, а не саму переменную, хранящую ключ. Например, если переменная `$del` содержит значение ключа, но вы вызываете команду `unset($del)`, это не повлияет на массив, так как вы просто удаляете значение переменной `$del`, а не элемент массива. Таким образом, правильный способ удалить элемент массива с использованием переменной: ```php $array = ['apple', 'banana', 'cherry']; $del = 1; // Ключ, который мы хотим удалить // Правильный способ удаления элемента на основе переменной unset($array[$del]); print_r($array); // Результат: Array ( [0] => apple [2] => cherry ) ``` Помните, что `unset()` удаляет элемент по указанному ключу в массиве, а не влияет на значения переменных, которые вы используете для указания этого ключа.
Так вы только копируете значение (строку "1") из подмассива в переменную:
$del = $arr[1]['one'];
В переменную$del
записался байт ASCII-сивола "1", условно говоря.
unset здорового человека именно такой:unset($arr[1]['one'])
unset курильщика можно организовать записью ссылки на массив в переменную. Но конкретный ключ всё равно придётся указывать внутри unset:
$arr = [ 1 => [ 'one' => '111', 'two' => '222', ], ]; $del = & $arr[1]; // ссылка на массив unset($del['one']); // удаление ключа из массива по ссылке print_r($arr); // результат Array ( [1] => Array ( [two] => 222 ) )
Попытка удалить полную ссылку на элемент не сработает, т.к. она просто удалит "связь" этой переменной$del
с элементом исходного массива. А массив останется без изменений.$del = & $arr[1]['one']; // ссылка на элемент, который хочется удалить unset($del); // не сработает. Просто разорвёт ссылку $del на элемент
unset($arr[1]['one'])
Так и удалять
Если смущает отсутствие ключа в результате, можно заменить значение на null :
$arr[1]['one'] = null;
Если нужно в цикле удалить
$arr[1]['one']="1"; $arr[1]['two']="2"; foreach( $arr as $k => $sub_arr ) { foreach( $sub_arr as $sub_k => $sub_v ) { if( $k === 1 && $sub_k === 'one' ) unset($arr[$k][$sub_k]); } }