$feetypes=[
[30,35,50],
[30,35],
[30,50],
[30,34]
];我有这个代码,想按照像计数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;
}但我的问题仍然存在
发布于 2019-04-10 02:06:46
我在值超过两层的情况下使用了递归。注意,由于递归,$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);发布于 2019-04-10 01:56:14
您可以使用array_merge将所有内部数组合并为一个数组,然后使用array_count_values获取计数。
$counts = array_count_values(array_merge(...$feetypes));发布于 2019-04-10 16:29:21
将所有子数组合并为一个数组,并应用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
)如果数组中有值和子数组,则函数merageAll有效。
工作DEMO LINK
https://stackoverflow.com/questions/55598503
复制相似问题