PHP array_merge:参数不是数组?

时间:2014-07-18 10:45:13

标签: php arrays array-merge

我在PHP中得到了一些我无法理解的奇怪行为。

    $count=0;
    $temp=array(); //this is definitely a new variable, not that it should matter
    foreach($array as $arr) {
        if ($arr->bbcode != $previous_bb) {
            $previous_bb=$arr->bbcode; 
            //stuff
            $temp=array_merge($temp,$arr);
         }
     //stuff
    }

我尝试过一点简化代码,并保持其重要性。 $ array是一个二维数组(所以每个$ arr都有一些属性,比如你看到的bbcode)。它抱怨说参数1,即$ temp,不是一个数组。将其类型化为阵列会产生虚假结果。当然,这是在其他代码中,我可以提供更多细节,如果需要,但任何想法?我在其他地方使用了完全相同的代码和语法,但它并没有抱怨...

编辑:随意贬低,对我一直在做的事情以及我一直在做的事情都有记忆失误。从来没有问过一个编程问题(几年之内),多亏了一大家伙,你的速度非常快!

2 个答案:

答案 0 :(得分:1)

让我们看看你的两个论点。

  • $temp初始化为array(),并重复分配给array_merge的返回值(除非出现问题)始终为数组。

    < / LI>
  • $arr。嗯,它的名字,对吗?这与$two = 3;一样可靠。您正在访问$arr->bbcode,因此它显然是一个对象,而不是一个数组。

您的意思是$temp[] = $arr;吗?

答案 1 :(得分:0)

  1. 您正在尝试将对象($ arr)与数组($ temp)合并。 PHP应该抱怨$ arr不是数组。请参阅以下示例代码:

    php > $obj = new StdClass();
    php > $obj->property = "value";
    php > $arr = [];
    php > array_merge($arr, $obj);
    
    Warning: array_merge(): Argument #2 is not an array in php shell code on line 1
    
    Call Stack:
       33.2510     230352   1. {main}() php shell code:0
       33.2510     230960   2. array_merge() php shell code:1
    
  2. 在PHP中进行类型转换总是有点棘手,如果你这样做,请检查the type juggling documentation以查看发生时会发生什么。

  3. 在尝试优化代码之前,您希望实现什么目标?清除了重复bb代码的新列表?