$feetypes=[
[30,35,50],
[30,35],
[30,50],
[30,34]
];
我有此代码,想按那里的值进行计数,例如count 30 * 4、35 * 2、50 * 2和34 * 1。
我已经尝试过:
$counts = array();
foreach ($array as $key=>$subarr) {
// Add to the current group count if it exists
if (isset($counts[$subarr['group']]) {
$counts[$subarr['group']]++;
}
// or initialize to 1 if it doesn't exist
else $counts[$subarr['group']] = 1;
// Or the ternary one-liner version
// instead of the preceding if/else block
$counts[$subarr['group']] = isset($counts[$subarr['group']]) ? $counts[$subarr['group']]++ : 1;
}
但我的问题仍然存在
答案 0 :(得分:2)
您可以使用array_merge
将所有内部数组合并为一个,然后使用array_count_values
来获取计数。
$counts = array_count_values(array_merge(...$feetypes));
答案 1 :(得分:0)
将所有子数组合并为一个数组,并应用array_count_values
函数以获取结果
function merageAll($arr) {
$flatArray = array();
foreach($arr as $element) {
if (is_array($element)) {
$flatArray = array_merge($flatArray, merageAll($element));
} else {
$flatArray[] = $element;
}
}
return $flatArray;
}
$res = array_count_values(merageAll($feetypes));
结果
Array
(
[30] => 4
[35] => 2
[50] => 2
[34] => 1
)
function merage如果数组中有值和子数组,则所有功能均正常工作。
答案 2 :(得分:-1)
如果值的深度超过两个级别,则使用递归。请注意,由于递归,$ count变量通过引用传递给函数。
<?php
$feetypes=[
[30,35,50],
[30,35],
[30,50],
[30,34]
];
$counts = array();
function countValues($arr, &$count) {
foreach($arr as $subval) {
if(is_array($subval)) {
countValues($subval,$count);
} else {
if(isset($count[$subval])) {
$count[$subval] += 1;
} else {
$count[$subval] = 1;
}
}
}
}
countValues($feetypes,$counts);
print_r($counts);