我正在使用 PHP 循环,我有一个关于 unset 如何影响数组键的问题。该数组使用 PHP 分配的标准数字键,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
)
自己测试一下,但这里是输出。
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
?>
这可能有点脱离上下文,但在从全局数组中取消设置值时,应用上面 Michael Berkowski 的答案,但使用 with$GLOBALS
而不是您声明的全局值 with global $variable_name
。所以它会是这样的:
unset($GLOBALS['variable_name']['array_key']);
代替:
global $variable_name;
unset($variable_name['array_key']);
注意:这仅在您使用全局变量时才有效。
密钥在删除的密钥丢失的情况下保留,但可以通过执行以下操作重新排列它们:
$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 与索引访问一起使用时,记住这一点很重要。