Как можно удалить элемент из массива?

Как правильно удалить элемент массива, если я использую переменную для хранения значения ключа, и почему в этом случае команда `unset($del)` не влияет на массив?
  • 12 октября 2024 г. 12:52
Ответы на вопрос 4
Чтобы удалить элемент из массива в 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]);
    }
}
Похожие вопросы