PHP - 计算二维数组中的重复值,然后仅显示带计数的唯一值

And*_*rew 2 php arrays counting

我已经在这几天工作了......但仍然无法达到我想要的效果.任何帮助都会非常感谢...提前谢谢你.

我有一个存储在$ log中的多数组,当你print_r($ log)时会显示如下:

   Array ( [0] => Array ( [0] => Red [1] => Steel ) 
           [1] => Array ( [0] => Red [1] => Wood ) 
           [2] => Array ( [0] => Blue [1] => Wood ) 
         )
Run Code Online (Sandbox Code Playgroud)

目前我有这个:

$counts = $log;
foreach ($log 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 "$v => $count <br />";
    }
}
Run Code Online (Sandbox Code Playgroud)

哪个显示:

0 => Red 
1 => Steel 
Red => 2 
Blue => 1 
0 => Red 
1 => Wood 
Steel => 1 
Wood => 2 
0 => Blue 
1 => Wood  
Run Code Online (Sandbox Code Playgroud)

但我真的希望得到最终结果:

<h2>Colors</h2>
Red => 2
Blue => 1

<h2>Materials</h2>
Steel => 1
Wood => 2
Run Code Online (Sandbox Code Playgroud)

Mar*_*ler 7

如果您正在使用PHP >= 5.5,可以将array_column()array_count_values()结合使用 :

$colors = array_count_values(array_column($log, 0));
$materials = array_count_values(array_column($log, 1));
Run Code Online (Sandbox Code Playgroud)

见演示


或者,如果您不使用PHP >= 5.5,这将适用于PHP 4, 5:

$colors = $materials = array();
foreach ($log as $a){
    $colors[] = $a[0];
    $materials[] = $a[1];
}

$colors = array_count_values($colors);
$materials = array_count_values($materials);
Run Code Online (Sandbox Code Playgroud)

见演示2


单击此处查看适用于任一方法的示例用例.