一个函数内的array_push(mainArr,subAssociativeArr)的PHP问题

问题描述 投票:0回答:3

当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 

那么,问题是什么?

php function multidimensional-array associative-array array-push
3个回答
1
投票

你忘了回来

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)相同,只是它避免了不必要的函数调用。

干杯。


1
投票

当它在一个函数中时,你有一个不同的范围。虽然addOne函数的参数具有相同的名称,但它们实际上是传递的变量的副本,而不是对它们的引用。

所以当你在一个函数中使用array_push()时,你只会影响该函数范围内的变量,而不是外部范围。

您可以返回$ store,也可以通过引用传递变量。


0
投票

如果希望它在函数内工作,则需要引用变量。 PHP中的引用定义为&,它们类似于C或C ++中的“指针”。

试试这个:

function addOne(&$store, $element){
    array_push($store, $element);
}

addOne($store, $samsung);

PHP引用是一个别名,它允许两个不同的变量写入相同的值。从PHP 5开始,对象变量不再包含对象本身作为值。它只包含一个对象标识符,允许对象访问者查找实际对象。当一个对象通过参数发送,返回或分配给另一个变量时,不同的变量不是别名:它们包含标识符的副本,该副本指向同一个对象。

http://www.php.net/manual/en/language.oop5.references.php

© www.soinside.com 2019 - 2024. All rights reserved.