解决方案取决于您使用的PHP版本。至少有2个解决方案:
第一(较新的PHP版本)
正如@JosepAlsina所说,最好也是最短的解决方案是使用array_column
以下方法:
$catIds = array_column($objects, 'id');
注意:
要迭代问题中所用的array
包含\stdClass
es,只能使用PHP版本>= 7.0
。但是在使用时,array
含array
是你可以做的,因为PHP一样>= 5.5
。
第二(旧的PHP版本)
@Greg说在较旧的PHP版本中可以执行以下操作:
$catIds = array_map(create_function('$o', 'return $o->id;'), $objects);
但要注意:在较新的PHP版本中>= 5.3.0
,最好使用Closure
s,如下所示:
$catIds = array_map(function($o) { return $o->id; }, $objects);
区别
第一个解决方案创建一个新函数并将其放入您的RAM。由于某种原因,垃圾回收器不会从内存中删除已经创建并已经调用的函数实例。而且无论如何,创建的函数实例都无法再被调用,因为我们没有指向它的指针。下次调用此代码时,将再次创建相同的函数。这种行为会慢慢填满您的记忆...
这两个例子都用内存输出进行比较:
坏
while (true)
{
$objects = array_map(create_function('$o', 'return $o->id;'), $objects);
echo memory_get_usage() . "\n";
sleep(1);
}
// the output
4235616
4236600
4237560
4238520
...
好
while (true)
{
$objects = array_map(function($o) { return $o->id; }, $objects);
echo memory_get_usage() . "\n";
sleep(1);
}
// the output
4235136
4235168
4235168
4235168
...
这也可以在这里讨论
内存泄漏?!在“ array_map”中使用“ create_function”时,垃圾收集器是否正确?