【问题标题】:PHP array_merge: argument not an array?PHP array_merge:参数不是数组?
【发布时间】:2014-07-18 10:45:12
【问题描述】:

我在 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,不是一个数组。将其类型转换为数组会产生虚假结果。当然,这是在其他代码中,如果需要,我可以提供更多详细信息,但是有什么想法吗?我在其他地方使用了完全相同的代码和语法,它没有抱怨......

编辑:随意投反对票,对我一直在使用的东西以及我一直在做的事情有记忆失误。以前(几年内)从来没有问过编程问题,非常感谢你们,你们的速度非常快!

【问题讨论】:

  • 问题的标题是给出的实际错误吗?
  • 如果错误信息说它不是一个数组,那它就不是一个数组。当您使用 vardump 或 gettype() 时会发生什么?
  • 我收回了,它总是一个数组(拼写错误)
  • 确切的错误:array_merge(): Argument #1 is not an array(肯定不是从 0 开始计数吧?)

标签: php arrays array-merge


【解决方案1】:

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

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

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

你是说$temp[] = $arr;吗?

【讨论】:

  • 确实如此,而且我所做的并不完全是典型的编程。为什么它在其他地方起作用(在完全相同的情况下)?编辑:好的,我看到我做了不同的事情。
【解决方案2】:
  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 代码的新列表?

【讨论】:

  • 出于某种原因,它在抱怨错误的论点,我不会试图找出原因,这也是我困惑的部分原因。感谢您的好回答:) 至于 3,不,这是做我想要实现的最有效的方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-08
  • 1970-01-01
  • 2013-04-21
  • 1970-01-01
  • 2018-10-05
  • 1970-01-01
相关资源
最近更新 更多