循环中的PHP array_splice无法正常工作

时间:2015-05-09 20:48:23

标签: php function array-splice

我正在使用以下代码,这一切似乎都很好。

$colors = array('red', 'yellow', 'blue');
$replacements = array('yellow' => array(1, 1), 'blue' => array('black','orange'));
foreach ($replacements as $color => $replace) {
    $position = array_search($color, $colors);
    array_splice($colors, $position, 1, $replace);
}

$ colors的结果:

Array
(
    [0] => red
    [1] => 1
    [2] => 1
    [3] => black
    [4] => orange
)

现在,我遇到了这个问题。如果我只是将$ replacements数组更改为以下(注意黄色数组值已更改):

$replacements = array('yellow' => array(0, 1), 'blue' => array('black','orange'));

然后再次运行代码我得到以下不良结果:

Array
(
    [0] => red
    [1] => black
    [2] => orange
    [3] => 1
    [4] => blue
)

上面的结果不是我所期待的。当传递零(0)值时,array_splice函数似乎存在某种问题。

期望的结果如下:

Array
(
    [0] => red
    [1] => 0
    [2] => 1
    [3] => black
    [4] => orange
)

任何可能出错的想法以及如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

你正在违反array_search()松散类型比较的默认行为。在PHP中,any string is considered equal to integer zero进行松散比较(==)而不是严格(===)。

所以在第二次替换时,PHP看到'blue'与第一次替换0松散等于'black','orange',并替换0所在的var_dump('blue' == 0); // bool(true) var_dump('blue' === 0); // bool(false)

TRUE

要严格比较array_search(),请将$colors = array('red', 'yellow', 'blue'); $replacements = array('yellow' => array(0, 1), 'blue' => array('black','orange')); foreach ($replacements as $color => $replace) { // Use a strict comparison with TRUE as the 3rd arg $position = array_search($color, $colors, TRUE); array_splice($colors, $position, 1, $replace); } print_r($colors); Array ( [0] => red [1] => 1 [2] => 0 [3] => black [4] => orange ) 作为其第三个参数。然后,您将获得预期的结果。

/usr/lib/php/extensions/no-debug-non-zts-20121212