【问题标题】:How to extract an associative array function argument AND pass a component of the array by reference in PHP?如何在 PHP 中提取关联数组函数参数并通过引用传递数组的组件?
【发布时间】:2017-12-15 14:03:39
【问题描述】:

出于可扩展性的目的,我通常将参数作为关联数组传递给函数(因为数组很容易更改)并在函数中传递extract()

$a = 'a'; ....... $n = 'n';

$arg = array(
    'a' => $a,
     .
     .
    'n' => $n
);

function doStuff($arg) {
    extract($arg);
    // etc
}

但是我没有尝试做同样的事情,而是通过引用传递 $arg 的变量组件。例如,要得到如下结果:

$a = 'x';

我可以这样做:

$a = 'a';

function doStuff(&$var) {
    $var = 'x';
}

doStuff($a); 

echo $a; // ---> echoes 'x'

您如何使用提取方法做到这一点?例如,以下回显“a”,而不是“x”:

$a = 'a'; ....... $n = 'n';

$arg = array(
    'a' => $a,
     .
     .
    'n' => $n
);

function doStuff(&$arg) {
    extract($arg);

    $a = 'x'; 
}

doStuff($arg);

echo $a; // echoes 'a'

我也试过这个:

$arg = array(
    'a' => &$a,
     .
     .
    'n' => $n
);

是否可以在这里使用extract() 使(在这种情况下)$a echo as 'x' ?

【问题讨论】:

  • "echo doStuff($a); // ---> echoes 'x'" -- 真的吗?语句的哪一部分显示了 "x"doStuff() 函数不显示任何内容,echo 显示 doStuff() returns 的内容,即完全没有。
  • 抱歉-要编辑-赶时间
  • 尝试使用EXTR_REFS 标志。请参阅extract()的手册

标签: php pass-by-reference


【解决方案1】:

我使用了 Patrick Q 的评论作为正确答案:

$a = 'a'; ....... $n = 'n';

$arg = array(
    'a' => &$a,
     .
     .
    'n' => $n
);

function doStuff($arg) {
    extract($arg, EXTR_REFS);

    $a = 'x'; 
}

doStuff($arg);

echo $a; // echoes 'x'

【讨论】:

    【解决方案2】:

    当您通过引用传递 $arg 数组时,必须更改 $arg 数组以反映此更改超出函数范围,所以我认为您需要使用更改后的值以任何其他方式组合或构建 $arg

    function doStuff(&$arg) {
        extract($arg);
        $a = 'x'; 
        $arg = combine(...);
        // OR
        $arg = ['a' => $a];
    }
    

    要查看它的运行情况: http://sandbox.onlinephpfunctions.com/code/70b4b5e7d90b829588aa0fd0b3caf621fa1b5ed3

    【讨论】:

    • 我不关心数组...我想要数组的一个组成部分,即$arg的'a'键,即$a
    猜你喜欢
    • 1970-01-01
    • 2021-09-29
    • 2012-05-16
    • 2011-12-15
    • 1970-01-01
    • 2020-11-29
    • 2021-10-18
    • 1970-01-01
    • 2015-07-04
    相关资源
    最近更新 更多