array_count_values(),其中对象为值

时间:2011-10-14 17:29:52

标签: php arrays

我在想,是否有类似于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!

3 个答案:

答案 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才可以处理对象数组。