23

我正在使用 PHP 循环,我有一个关于 unset 如何影响数组键的问题。该数组使用 PHP 分配的标准数字键,0, 1, 2, 3 etc.... 每当unset()在一个数组值上运行时,数组键是被打乱的还是像以前一样被维护?

感谢您的时间。

4

6 回答 6

42

密钥不会被打乱或重新编号。密钥被简单地移除,其他的unset()则保留。

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

Array
(
    [0] => 1
    [1] => 2
    [3] => 4
    [4] => 5
)
于 2011-06-16T18:24:38.077 回答
4

自己测试一下,但这里是输出。

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
)
于 2011-06-16T18:25:24.463 回答
2

他们就像他们一样。那一键刚刚删除

于 2011-06-16T18:24:56.663 回答
2

键消失,无论是否为数字。试试下面的测试脚本。

<?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
?>
于 2011-06-16T18:26:32.583 回答
1

这可能有点脱离上下文,但在从全局数组中取消设置值时,应用上面 Michael Berkowski 的答案,但使用 with$GLOBALS而不是您声明的全局值 with global $variable_name。所以它会是这样的:

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

代替:

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

注意:这仅在您使用全局变量时才有效。

于 2013-01-28T11:04:33.420 回答
0

密钥在删除的密钥丢失的情况下保留,但可以通过执行以下操作重新排列它们:

$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 与索引访问一起使用时,记住这一点很重要。

于 2018-02-12T21:44:47.903 回答