Php 在函数中调用数组\拼接/取消设置:为什么副作用不会传播?

Php 在函数中调用数组\拼接/取消设置:为什么副作用不会传播?,php,arrays,unset,array-splice,Php,Arrays,Unset,Array Splice,我想用PHP从数组中删除元素,并看到使用array\u splice或unset非常简单 我想在另一个函数中使用它,该函数将这个数组中的元素作为参数移除。但是,该函数还有一些其他返回值,数组应该作为副作用进行更新(array\u-splice或unset两者都有副作用)。我的代码如下所示: <?php function removeSomeElements($arr) { for ($i = 0; $i<count($arr); $i++) { $c = $

我想用PHP从数组中删除元素,并看到使用
array\u splice
unset
非常简单

我想在另一个函数中使用它,该函数将这个数组中的元素作为参数移除。但是,该函数还有一些其他返回值,数组应该作为副作用进行更新(
array\u-splice
unset
两者都有副作用)。我的代码如下所示:

<?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
函数的参数在函数内部进行了很好的更新,但在函数外部没有进行更新。我错过什么了吗


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

您需要通过
&

试着这样做:

替换此行:

function removeSomeElements(&$arr)
函数删除某些元素($arr)

这一行:

function removeSomeElements(&$arr)

您需要通过
&

试着这样做:

替换此行:

function removeSomeElements(&$arr)
函数删除某些元素($arr)

这一行:

function removeSomeElements(&$arr)

另一种方法是在函数中返回修改过的数组,然后设置
$t
变量,如下所示:

<?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 $arr; // <-- return the altered array
}

$t = [0, 3, 1];

print_r($t);  // original array
$t = removeSomeElements($t); // <-- set the variable
print_r($t);

另一种方法是在函数中返回修改过的数组,然后设置
$t
变量,如下所示:

<?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 $arr; // <-- return the altered array
}

$t = [0, 3, 1];

print_r($t);  // original array
$t = removeSomeElements($t); // <-- set the variable
print_r($t);

通过引用搜索通过引用搜索Hanks,这很有效,但如果可能的话,我试图避免返回数组。@Busyan别担心,伙计,去找第四只鸟的答案!谢谢,这很管用,但如果可能的话,我会尽量避免返回阵列。@busyan别担心,伙计,去找第四只鸟的答案吧!工作起来很有魅力!工作起来很有魅力!