首页 > 解决方案 > 在函数中调用 array_splice/unset:为什么副作用不会传播?

问题描述

array_splice我想用 PHP 从数组中删除元素,发现使用or很容易unset

我想在另一个函数中使用它,该函数将此数组与要删除的元素作为参数。但是,该函数具有其他一些返回值,并且该数组应作为副作用更新(array_spliceunset两者都按副作用工作)。我的代码如下所示:

<?php

function removeSomeElements($arr)
{
    for ($i = 0; $i<count($arr); $i++) {
        $c = $arr[$i];
        if ($c > 2) {
            echo "Element $c found at $i\n";
            unset($arr[$i]);
        }
    }
    print_r($arr);  // misses middle element
    return true;
}

$t = [0, 3, 1];

print_r($t);  // original array
$success = removeSomeElements($t);
print_r($t);  // should be missing middle element, but everything is here

我遇到了与 相同的问题array_splice,也就是说,当我将调用替换为unset以下内容时:

array_splice($arr, $i, 1);
$i--;

函数的参数在函数内部很好地更新,但在外部没有。我错过了什么吗?


注意:我可以很容易地找到解决方法,我只是想知道这是否可行以及为什么/为什么不可行。提前致谢!

标签: phparraysunsetarray-splice

解决方案


您需要通过引用传递数组 &

试试这样:

替换这一行:

function removeSomeElements($arr)

有了这条线:

function removeSomeElements(&$arr)

测试


推荐阅读