Php 计算一个数组中出现的值在另一个数组中的出现次数

Php 计算一个数组中出现的值在另一个数组中的出现次数,php,arrays,Php,Arrays,我有一组人看起来像这样: $people = Array ( [0] => Array ( [email] => NameSurname@example.com [name] => Name Surname [count] => 0 ) [1] => Array

我有一组人看起来像这样:

$people =
    Array
    (
        [0] => Array
            (
                [email] => NameSurname@example.com
                [name] => Name Surname
                [count] => 0
            )

        [1] => Array
            (
                [email] => Name2Surname@example.com
                [name] => Name2 Surname
                [count] => 0
            )
    )
$query=
    Array
    (
        [0] => Array
            (
                [email] => NameSurname@example.com
                [name] => Name Surname
            )

        [1] => Array
            (
                [email] => Name2Surname@example.com
                [name] => Name2 Surname
            )

        [2] => Array
            (
                [email] => NameSurname@example.com
                [name] => Name Surname
            )

    )
我有一个数组,它是MySQL查询的结果,如下所示:

$people =
    Array
    (
        [0] => Array
            (
                [email] => NameSurname@example.com
                [name] => Name Surname
                [count] => 0
            )

        [1] => Array
            (
                [email] => Name2Surname@example.com
                [name] => Name2 Surname
                [count] => 0
            )
    )
$query=
    Array
    (
        [0] => Array
            (
                [email] => NameSurname@example.com
                [name] => Name Surname
            )

        [1] => Array
            (
                [email] => Name2Surname@example.com
                [name] => Name2 Surname
            )

        [2] => Array
            (
                [email] => NameSurname@example.com
                [name] => Name Surname
            )

    )
对于$people中的每个电子邮件地址,我希望
$people['count']
等于该电子邮件地址在$query中出现的次数

我已经尝试了很多方法来做到这一点,但并没有达到预期的效果

为免生疑问,基于上述示例的最终结果应如下所示:

$people =
    Array
    (
        [0] => Array
            (
                [email] => NameSurname@example.com
                [name] => Name Surname
                [count] => 2
            )

        [1] => Array
            (
                [email] => Name2Surname@example.com
                [name] => Name2 Surname
                [count] => 1
            )
    )
$query=
    Array
    (
        [0] => Array
            (
                [email] => NameSurname@example.com
                [name] => Name Surname
                [cnt] => 2
            )

        [1] => Array
            (
                [email] => Name2Surname@example.com
                [name] => Name2 Surname
                [cnt] => 1
            )                  
    )

UPD:使用
array\u map
array\u reduce
和nice
三元
运算符的又一个解决方案。它的速度比使用foreach的速度慢,但紧凑性和专业性是前者的两倍

它(在性能方面)较慢。函数调用开销的减少,但在“少量”的迭代中,这种减少可以忽略不计。它将更新
$people
数组而不重新分配它。我们通过参考传输了每个
和$man

array_map(function (&$man) use ($query) {
    $man['count'] = array_reduce($query, function ($count, $row) use ($man) {
        return ($row['email'] === $man['email']) ? ++$count : $count ;
    }, 0);
}, $people);

不确定这是否正是您需要的,但您可以将正在运行的查询更改为:

SELECT COUNT(name) as cnt, name,email FROM table_name GROUP BY name;
然后,
$query
数组将如下所示:

$people =
    Array
    (
        [0] => Array
            (
                [email] => NameSurname@example.com
                [name] => Name Surname
                [count] => 2
            )

        [1] => Array
            (
                [email] => Name2Surname@example.com
                [name] => Name2 Surname
                [count] => 1
            )
    )
$query=
    Array
    (
        [0] => Array
            (
                [email] => NameSurname@example.com
                [name] => Name Surname
                [cnt] => 2
            )

        [1] => Array
            (
                [email] => Name2Surname@example.com
                [name] => Name2 Surname
                [cnt] => 1
            )                  
    )

然后您可以在数组上运行,只需获取
$query
数组中每个项目的
cnt

检查重复值的代码在哪里。您可以直接从数据库中选择计数的电子邮件吗?类似这样的事情:
从电子邮件所在的表中选择count(*)NameSurname@example.com', 'Name2Surname@example.com“)通过电子邮件分组
?我明白你们两人的意思,但在这种特殊情况下两者都没有用。数组实际上包含的信息比上面显示的多得多,因此,重复值不是问题。至于MySQL查询,每个数组可能包含数百个项,因此任何额外的查询都不是最优的。谢谢你花时间评论,就这样-非常感谢。很快就得到了我需要的答案,并为下一次学到了新的东西。干得好,谢谢你的快速回复。谢谢,回答得好。我们正在寻找一种更为PHP的方法来实现这一点,@Paul T.Rawkeen得到了我所希望的解决方案。