php数组按引用传递 - 为键分配重复值将被丢弃

时间:2010-08-16 10:42:05

标签: php arrays function

我发送一个最初为空的数组变量的引用。 在被调用的函数中,数组被填充。

function one()
{
     $ret = array();
     two($ret);

      pri nt_r($ret);
}

function two(&$res)
{
     foreach($a as $b)
     {
       $id = $b->getid();
       $txt = $b->gettxt();

       $res[$id] = $txt;
      }
}

这里,如果$ id是重复的,我假设它默认被覆盖。 也就是说,如果foreach运行5次,如果id = 5则运行3次,那么结果只是数组中的两个元素;

这是这种数组赋值的默认行为吗? 还是我错过了什么?


是的,它用最后的值覆盖重复项。我单独测试,它碰巧是假设的。但是如果我们使用array_push,我希望它会被复制。我认为重复的直接分配将被复制而不是覆盖。无论如何,让我从用户那里得到一些评论,以便我可以更新,如果我错过了一些有关此重复和覆盖的有用信息。

2 个答案:

答案 0 :(得分:2)

来自PHP Manual on Arrays:

  

PHP中的数组实际上是一个有序的映射。映射是将值与键关联的类型。此类型针对多种不同用途进行了优化;它可以被视为数组,列表(向量),哈希表(地图的实现),字典,集合,堆栈,队列,甚至更多。由于数组值可以是其他数组,因此树和多维数组也是可能的。

另外

  

键可以是整数或字符串。如果一个键是一个整数的标准表示,它将被解释为这样(即“8”将被解释为8,而“08”将被解释为“08”)

对你的问题最重要的是

  

如果未为某个值指定键,则采用整数索引的最大值,新键将为该值加1.如果指定了已指定值的键,则该值将被覆盖。

答案 1 :(得分:1)

我不明白你为什么要通过引用来讨论数组,或者你的例子中有$ a,但简单的答案是肯定的,它们会被覆盖。

$a = array();
$b = 'someText'; // or $b = 25;
$a[$b] = 1;
$a[$b] = 2;

然后$ a [$ b]将是2,无论$ b是什么,以及$ a来自哪里。