Я работаю над этим уже пару дней … и до сих пор не смог достичь желаемых результатов. Любая помощь по этому поводу была бы весьма признательна … спасибо заранее.
У меня есть многоадресный массив, хранящийся в $ log, который отображается таким образом, когда вы печатаете_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
Если вы используете 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);
См. Демо 2
Щелкните здесь для примера использования, который будет работать с любым методом.
Я делаю так:
<?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"; ?>