Intereting Posts

PHP – подсчитать повторяющиеся значения в двухмерном массиве, а затем отобразить только уникальные значения со счетчиком

Я работаю над этим уже пару дней … и до сих пор не смог достичь желаемых результатов. Любая помощь по этому поводу была бы весьма признательна … спасибо заранее.

У меня есть многоадресный массив, хранящийся в $ 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"; ?>