Влияние PHP Unset Array на другие индексы - PullRequest
19 голосов
/ 16 июня 2011

Я работаю с циклом PHP, и у меня был один вопрос относительно того, как unset влияет на ключи массива.В этом массиве используются стандартные числовые ключи, назначаемые PHP, 0, 1, 2, 3 etc....Всякий раз, когда unset() работает со значением массива, ключи массива тасуются или сохраняются, как и раньше?

Спасибо за ваше время.

Ответы [ 6 ]

41 голосов
/ 16 июня 2011

Клавиши не перетасованы и не перенумерованы. Клавиша unset() просто удаляется, а остальные остаются.

$a = array(1,2,3,4,5);
unset($a[2]);
print_r($a);

Array
(
    [0] => 1
    [1] => 2
    [3] => 4
    [4] => 5
)
4 голосов
/ 16 июня 2011

Проверьте сами, но вот вывод.

php -r '$a=array("a","b","c"); print_r($a); unset($a[1]); print_r($a);'
Array
(
    [0] => a
    [1] => b
    [2] => c
)
Array
(
    [0] => a
    [2] => c
)
2 голосов
/ 16 июня 2011

Ключ исчезает, независимо от того, числовой он или нет. Попробуйте тестовый скрипт ниже.

<?php
    $t = array( 'a', 'b', 'c', 'd' );
    foreach($t as $k => $v)
        echo($k . ": " . $v . "<br/>");
    // Output: 0: a, 1: b, 2: c, 3: d

    unset($t[1]);

    foreach($t as $k => $v)
        echo($k . ": " . $v . "<br/>");
    // Output: 0: a, 2: c, 3: d
?>
2 голосов
/ 16 июня 2011

Они такие, как были.Этот ключ просто УДАЛЕН

1 голос
/ 28 января 2013

Это может быть немного вне контекста, но при сбрасывании значений из глобального массива примените приведенный выше ответ Михаила Берковски, но при использовании с $GLOBALS вместо глобального значения, которое вы объявили с global $variable_name.Так что это будет что-то вроде:

unset($GLOBALS['variable_name']['array_key']);

Вместо:

global $variable_name; unset($variable_name['array_key']);

NB : это работаеттолько если вы используете глобальные переменные.

0 голосов
/ 13 февраля 2018

Ключи сохраняются с отсутствующим удаленным ключом, но их можно переставить следующим образом:

$array = array(1,2,3,4,5);
unset($array[2]);
$arranged = array_values($array);
print_r($arranged);

Выходы:

Array
(
    [0] => 1
    [1] => 2
    [2] => 4
    [3] => 5
)

Обратите внимание, что если мы сделаем следующее без перестановки:

unset($array[2]);
$array[]=3;

Индекс значения 3 будет 5, потому что он будет помещен в конец массива и не будет пытаться проверить или заменить отсутствующий индекс. Это важно помнить при использовании FOR LOOP с доступом к индексу.

...