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

Как правильно удалить элемент массива, если я использую переменную для хранения значения ключа, и почему в этом случае команда `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()` удаляет элемент по указанному ключу в массиве, а не влияет на значения переменных, которые вы используете для указания этого ключа.
Так вы только копируете <i>значение</i> (строку  "1") из подмассива в переменную: <br/> <code>$del = $arr[1]['one'];</code> <br/> В переменную <code>$del</code> записался байт ASCII-сивола "1", условно говоря. <br/> <br/> <b>unset здорового человека</b> именно такой: <code>unset($arr[1]['one'])</code> <br/> <br/> unset курильщика можно организовать записью <a href="https://www.php.net/manual/ru/language.references.return.php" rel="nofollow">ссылки</a> на массив в переменную. Но конкретный ключ всё равно придётся указывать внутри unset: <br/> <pre><code class="php">$arr = [ 1 =&gt; [
    'one' =&gt; '111',
    'two' =&gt; '222',
],  ];

$del = &amp; $arr[1]; // ссылка на массив
unset($del['one']); // удаление ключа из массива по ссылке

print_r($arr); // результат Array ( [1] =&gt; Array ( [two] =&gt; 222 ) )</code></pre> <br/> <br/> Попытка удалить полную ссылку на элемент не сработает, т.к. она просто удалит "связь" этой переменной <code>$del</code> с элементом исходного массива. А массив останется без изменений. <pre><code class="php">$del = &amp; $arr[1]['one']; // ссылка на элемент, который хочется удалить
unset($del); // не сработает. Просто разорвёт ссылку $del на элемент</code></pre>
<blockquote>unset($arr[1]['one'])</blockquote> <br/> Так и удалять <br/> <br/> Если смущает отсутствие ключа в результате, можно заменить значение на <b>null</b> : <br/> <code class="php">$arr[1]['one'] = null;</code>
Если нужно в цикле удалить <br/> <pre><code class="php">$arr[1]['one']="1";
$arr[1]['two']="2";

foreach( $arr as $k =&gt; $sub_arr ) {
    foreach( $sub_arr as $sub_k =&gt; $sub_v ) {
        if( $k === 1 &amp;&amp; $sub_k === 'one' )
            unset($arr[$k][$sub_k]);
    }
}</code></pre>
Похожие вопросы