PHP数组\ U合并:参数不是数组?

PHP数组\ U合并:参数不是数组?,php,arrays,array-merge,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;

我在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
    }
我试着将代码简化一点,只保留必要的内容$数组是一个二维数组(因此每个$arr都有一些属性,如您看到的bbcode)。它抱怨参数1,即$temp,不是数组。将其键入数组会产生虚假结果。当然,这在其他代码中,如果需要的话,我可以提供更多细节,但是有什么想法吗?我在其他地方使用了完全相同的代码和语法,它不会抱怨


编辑:自由地投反对票,对我的工作内容和做事方式有记忆缺失。以前从未问过编程问题(几年内),非常感谢各位,你们的速度非常快

让我们看看你的两个论点

  • $temp
    被初始化为
    array()
    ,并重复分配给
    array\u merge
    的返回值,该值(除非出错)始终是数组

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

你是说
$temp[]=$arr

  • 您正在尝试将对象($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
    
  • php中的类型转换总是有点棘手,如果您这样做的话,请检查一下发生了什么

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


  • 问题的标题是实际错误吗?如果错误消息说它不是数组,则它不是数组。当您使用vardump或gettype()时会发生什么?我收回这一点,它总是一个数组(拼写错误)。确切的错误:array_merge():Argument#1不是数组(当然它不是从0开始计数的,是吗?)。这是真的,我所做的并不是典型的编程。那么,为什么它在其他地方(在完全相同的情况下)起作用呢?编辑:好吧,我明白我做的不同了。出于某种原因,它在抱怨错误的论点,我不会试图找出原因,这也是我困惑的原因之一。谢谢你的回答:)至于第三点,不,这是我想要达到的最有效的方式