2010-12-11 64 views
0

我无法弄清楚这段PHP中$arrayParams的最终结果之间的区别是什么。Php数组:找出差异!

该函数采用字符串$types,另一个参数为$params$params本身可以是任何类型的单个值或任何类型的值的数组。

此代码的目的是在代码中稍后绑定到call_user_func_array()

最终的$arrayParams变量需要是索引为0的数组作为原始$types字符串,然后以下索引将作为传入的字符串的引用,作为$params

if(is_array($params)) { 
    // Make a new array, first index is $types string. 
    $arrayParams = array($types); 

    // Loop over $params array and add the pointer of each index to $arrayParams. 
    // ??? This doesn't seem to be working ??? 
    foreach($params as $p) { 
    $arrayParams[] = &$p; 
    } 
} 
else { 
    // This works fine here, very simple. 
    $arrayParams = array($types, &$params); 
} 

var_dump$array_params,当传递$params为阵列示出了第一后所有的键是一个指针,指向同一值(?)

回答

2
// ... 
foreach($params as &$p) { 
    $arrayParams[] = &$p; 
} 
unset($p); 
// ... 

foreach运行在$params的副本-array,除非你指定在迭代中使用引用。

+0

请问为什么$ p需要取消设置? – Greg 2010-12-11 13:12:32

+0

@Greg请参阅[此处的警告](http://php.net/manual/en/control-structures.foreach.php)。 – 2010-12-11 13:13:50

+0

由于“未设置”提示而接受的答案。谢谢 :) – Greg 2010-12-11 13:16:07