【问题标题】:converting array of values to an array of references将值数组转换为引用数组
【发布时间】:2011-09-12 01:55:33
【问题描述】:

当我使用print_r 来检查这个函数的内容时,$arr$refs 是一样的。

很奇怪,因为这是通过 here 解决向 call_user_func_array 传递引用数组的问题的解决方案。

这个函数是返回一个引用数组还是一个值数组?

function makeValuesReferenced($arr){ 
    $refs = array(); 
    foreach($arr as $key => $value) 
        $refs[$key] = &$arr[$key]; 
    return $refs; 

}

函数调用:

print_r($db_->ref_arr(array(1,2,3,4)));

结果

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

信息。关于准备好的语句here

信息。在 call_user_func_array here

信息。关于 call_user_func_array here 引用的必要性

这个函数是返回一个引用数组还是一个值数组?

更新:使用 var_dump 并在参数中添加 & 给出了类似的结果...添加了对正在返回整数的验证。

1 2 3 4 数组(4) { [0]=> &int(1) 1=> &int(2) 2=> &int(3) 3=> &int(4) }

【问题讨论】:

  • 更改arr中的值,看看ref中的值是否改变
  • 我不确定引用变量和值变量看起来会有什么不同。你想完成什么?
  • 能否请您以问题的形式重新表述您的问题?
  • 如果内存芯片评论是针对我的,我不确定它是什么意思。你想做什么?

标签: php


【解决方案1】:

不,您的函数不返回引用数组。 如果要返回引用数组,请更改为:

function makeValuesReferenced(&$arr){ 
    $refs = array(); 
    foreach($arr as $key => $value) 
        $refs[$key] = &$arr[$key]; 
    return $refs; 

}

PS:你应该使用var_dump来检查。

【讨论】:

  • 这叫Passing by Reference
  • print_r 只打印出值,var_dump 可以显示是否是引用。
【解决方案2】:

还有一种替代方法,它涉及一个辅助函数。

//Helper function
function makeValueReferenced(&$value) {
    return $value;
}

function makeValuesReferenced($array) {
    return array_map("makeValueReferenced", $array);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多