当array_push(mainArr,subAssociativeArr)在函数内部时,它不起作用。我需要一些关于此代码的帮助:
$store=array();
$samsung=array('id'=>'10','name'=>'samsung');
$sony=array('id'=>'11','name'=>'sony');
function addOne($store, $element){
array_push($store, $element);
}
addOne($store, $samsung);
var_dump($store); //output: empty array
但是如果没有功能它会正常工作;如下:
$store=array();
$samsung=array('id'=>'10','name'=>'samsung');
$sony=array('id'=>'11','name'=>'sony');
array_push($store, $samsung);
var_dump($store); //output: array is added
那么,问题是什么?
你忘了回来
function addOne($store, $element){
$store[]=$element;
return $store;
}
$store = addOne($store, $samsung);
如果你愿意,你也可以通过引用传递(这更符合你的代码):
function addOne(&$store, $element){
$store[]=$element;
}
addOne($store, $samsung);
注意&
。而不是复制输入,这更像是指向原始变量的指针,因此您可以直接更新它。 Ether方式很好,这是开发人员选择的问题。例如,将两者混合起来非常容易:
//Don't do this
function addOne(&$store, $element){ //returns null
$store[]=$element;
}
$store = addOne($store, $samsung); //sets $store to null
您可能不想这样做,所以我可以看到两种方式的争论。除非你有超大阵列,否则它可能并不重要。很容易忘记随机函数是通过引用传递的。
所以使用任何对你更有意义的方法。
附: - 我拒绝使用array_push
,这很难看,我不喜欢它:)。执行$store[]=$element;
与array_push($store,$element)
相同,只是它避免了不必要的函数调用。
干杯。
当它在一个函数中时,你有一个不同的范围。虽然addOne
函数的参数具有相同的名称,但它们实际上是传递的变量的副本,而不是对它们的引用。
所以当你在一个函数中使用array_push()
时,你只会影响该函数范围内的变量,而不是外部范围。
您可以返回$ store,也可以通过引用传递变量。
如果希望它在函数内工作,则需要引用变量。 PHP中的引用定义为&
,它们类似于C或C ++中的“指针”。
试试这个:
function addOne(&$store, $element){
array_push($store, $element);
}
addOne($store, $samsung);
PHP引用是一个别名,它允许两个不同的变量写入相同的值。从PHP 5开始,对象变量不再包含对象本身作为值。它只包含一个对象标识符,允许对象访问者查找实际对象。当一个对象通过参数发送,返回或分配给另一个变量时,不同的变量不是别名:它们包含标识符的副本,该副本指向同一个对象。