Я работаю с петлей PHP, и у меня был один вопрос относительно того, как unset влияет на ключи массива. Этот массив использует стандартные числовые ключи, назначенные PHP, 0, 1, 2, 3 etc...
. 0, 1, 2, 3 etc...
Всякий раз, когда unset()
работает по значению массива, перетаскиваются ли клавиши массива или они поддерживаются по-прежнему?
Спасибо за ваше время.
Клавиши не перетасовываются и не нумеруются. Клавиша unset()
просто удаляется, а остальные остаются.
$a = array(1,2,3,4,5); unset($a[2]); print_r($a); Array ( [0] => 1 [1] => 2 [3] => 4 [4] => 5 )
с$a = array(1,2,3,4,5); unset($a[2]); print_r($a); Array ( [0] => 1 [1] => 2 [3] => 4 [4] => 5 )
Проверьте это самостоятельно, но вот результат.
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 )
с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 )
Они такие, как они. Этот один ключ просто удаляется
Ключ исчезает, является ли он числовым или нет. Попробуйте выполнить тестовый сценарий ниже.
<?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 ?>
с<?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 ?>
Это может быть немного из контекста, но при отключении значений из глобального массива применить ответ Майкла Берковски выше, но использовать его с $GLOBALS
вместо глобального значения, которое вы объявили с помощью global $variable_name
. Так будет что-то вроде:
unset($GLOBALS['variable_name']['array_key']);
Вместо:
global $variable_name; unset($variable_name['array_key']);
NB : Это работает, только если вы используете глобальные переменные.