我在想,是否有类似于array_count_values
的东西,但它适用于对象?
让我解释一下:
array_count_values
将数组作为参数,例如
[1]
Array (
[0] => banana
[1] => trololol
)
如果我将该数组提供给array_count_values
,我会得到类似的结果:
[2]
Array (
[banana] => 1
[trololol] => 1
)
现在让我们说,我有对象,而不是字符串,我想根据它们的一个属性来计算。所以我有:
[3]
Array (
[0] => stdClass Object (
[name] => banana
[description] => banana, me gusta!
)
[1] => stdClass Object (
[name] => trololol
[description] => trolololololol
)
)
我希望神奇函数即时搜索能够计算具有相同name
属性的对象数量,并返回与 [2] <相同的输入/ p>
显然我可以轻松地自己做,但我只是想知道是否有内置功能,因为我似乎无法找到一个。谢谢,亲切的SOers!
答案 0 :(得分:5)
不存在此类功能。您始终需要首先映射您想要计算的值(并且这些值必须是字符串或整数):
$map = function($v) {return $v->name;};
$count = array_count_values(array_map($map, $data));
答案 1 :(得分:0)
查看Reflection classes以便动态轻松获取有关对象的信息。
答案 2 :(得分:0)
从PHP 7.0开始,您可以为此使用array_column
。
$counts = array_count_values(array_column($array_of_objects, 'name'));
最初询问并回答此问题时,array_column
还不存在。它是在PHP 5.5中引入的,但是直到7.0才可以处理对象数组。