我在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,不是一个数组。将其类型化为阵列会产生虚假结果。当然,这是在其他代码中,我可以提供更多细节,如果需要,但任何想法?我在其他地方使用了完全相同的代码和语法,但它并没有抱怨...
编辑:随意贬低,对我一直在做的事情以及我一直在做的事情都有记忆失误。从来没有问过一个编程问题(几年之内),多亏了一大家伙,你的速度非常快!答案 0 :(得分:1)
让我们看看你的两个论点。
$temp
初始化为array()
,并重复分配给array_merge
的返回值(除非出现问题)始终为数组。
$arr
。嗯,它的名字,对吗?这与$two = 3;
一样可靠。您正在访问$arr->bbcode
,因此它显然是一个对象,而不是一个数组。
您的意思是$temp[] = $arr;
吗?
答案 1 :(得分:0)
您正在尝试将对象($ 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中进行类型转换总是有点棘手,如果你这样做,请检查the type juggling documentation以查看发生时会发生什么。
在尝试优化代码之前,您希望实现什么目标?清除了重复bb代码的新列表?