我已经在这几天工作了......但仍然无法达到我想要的效果。非常感谢任何帮助... ...提前谢谢你。
我有一个存储在$ log中的多数组,当你print_r($ log)时显示如下:
Array ( [0] => Array ( [0] => Red [1] => Steel )
[1] => Array ( [0] => Red [1] => Wood )
[2] => Array ( [0] => Blue [1] => Wood )
)
目前我有这个:
$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 />";
}
}
哪个显示器:
0 => Red
1 => Steel
Red => 2
Blue => 1
0 => Red
1 => Wood
Steel => 1
Wood => 2
0 => Blue
1 => Wood
但我真的希望得到最终结果:
<h2>Colors</h2>
Red => 2
Blue => 1
<h2>Materials</h2>
Steel => 1
Wood => 2
答案 0 :(得分: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));
或者,如果您未使用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);
Click here for sample use case that will work with either method.
答案 1 :(得分:1)
我这样做:
<?php
$log = array (
array('Red', 'Steel'),
array('Red', 'Wood'),
array('Blue', 'Wood')
);
$materials = array();
$colors = array();
foreach($log as $line) {
$colors[$line[0]] = (!isset($colors[$line[0]])) ? 1 : $colors[$line[0]] + 1;
$materials[$line[1]] = (!isset($materials[$line[1]])) ? 1 : $materials[$line[1]] + 1;
}
?>
<h2>Colors</h2>\n
<?php
foreach ($colors as $color => $amount)
echo "{$color} => {$amount}<br>\n";
?>
<h2>Materials</h2>\n
<?php
foreach ($materials as $material => $amount)
echo "{$material} => {$amount}<br>\n";
?>