如何提取关联数组函数参数并通过PHP中的参考传递数组的组件



出于可伸缩目的,我通常将参数作为关联数组(由于数组很容易更改)和 extract()的函数:

$a = 'a'; ....... $n = 'n';
$arg = array(
    'a' => $a,
     .
     .
    'n' => $n
);
function doStuff($arg) {
    extract($arg);
    // etc
}

,但我未能尝试执行相同的操作,但是通过参考将$ arg的变量(s)组件传递。例如,要获得以下结果:

$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回波为'x'?

我使用了帕特里克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'

当您传递 $ arg 数组时,它是 $ arg arg 数组,必须更改以反映此更改在功能范围中,我认为您需要使用组合或构建 $ arg 返回其他任何其他方式,并具有更改的值:

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

看到它运行:http://sandbox.onlinephpfunctions.com/code/70b4b5e7d90b82958888888888aaaa0b3caf621fa1b5ed3

最新更新