繁体   English   中英

计算多维数组中某个值的数量

[英]Count number of certain value in multidimensional array

如何计算多维数组中某个值的数量? 例如:

array(
    array ('stack' => '1')
    array ('stack' => '1')
    array ('stack' => '1')
    array ('stack' => '1')
    array ('stack' => '2')
    array ('stack' => '2')
)

在此示例中,结果应为:

stack == 1 => 4场比赛
stack == 2 => 2场比赛

你必须自己循环:

$counts = array();
foreach( $array as $value) {
    foreach( $value as $k => $v) {
        if( !isset( $counts[$k])) $counts[$k] = array();
        if( !isset( $counts[$k][$v])) $counts[$k][$v] = 0;
        $counts[$k][$v] += 1;
    }
}

foreach( $counts as $k => $v1)
    foreach( $v1 as $v => $count)
        echo "$k == $v => $count matches\n";

将打印

stack == 1 => 4 matches
stack == 2 => 2 matches
$occur = array();

foreach ($array as $item) {
    foreach ($item as $k => $v) {
        $occur["$k == $v"]++;
    }
}

正如Ray所说,根据您的数据结构,您唯一的选择是遍历整个阵列并随着时间的推移计算。

如果您担心性能,可能需要考虑使用不同的数据结构(可能与数组一起)。 第二个数据结构类似于哈希,它将数组值作为键,并包含在构建数组时可以构建的持续计数。

这样你就可以获得最小的性能,而不必再重复一次。

您需要进行一些修改,但这对您有所帮助

<?php


    function array_count_values_of($value, $array) {
        $counts = array_count_values($array);
        return $counts[$value];
    }

    $array = array(1, 2, 3, 3, 3, 4, 4, 5, 6, 6, 6, 6, 7);
    $array2 = array_unique($array);
    for($i=0 ; $i<count($array2) ; $i++)
    {
        $temp = array_count_values_of($array2[$i], $array);
        $result[$i][0] = $array2[$i];
        $result[$i][1] = $temp;
    }

    print_r($result);

    ?>

我只是简单地遍历它并将结果推送到一个新的结果数组(但我不打算为你编写代码)。

您可以执行更复杂的操作,例如使用带有回调函数的array_walk / array_filter来处理它......但这可能效率较低。

看到这篇文章: PHP多维数组计数

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM