我有一个多维数组,我需要计算每个类别中有多少项:
array (
array(
'name' => 'Bob',
'category' => '2'
),
array(
'name' => 'Bill',
'category' => '6'
),
array(
'name' => 'John',
'category' => '1'
),
array(
'name' => 'Jack',
'category' => '2'
),
)我想把它们分成几个类别。
例如;
仅仅得到每个类别的计数将是很好的,但是能够将数组重新排列到类别中也是有用的。我想两者兼得。
我尝试过搜索StackOverflow,但是找不到这个特定的查询。我猜这可能会在某个地方使用array_map,但我对这个函数不太熟悉。
任何帮助都是非常感谢的!
发布于 2015-02-04 15:16:54
如果数组不是太大,那么简单的方法可能是最简单的方法。创建一个新数组,使用类别作为键,并对数组进行迭代,计数项。
发布于 2015-02-04 15:24:43
你可以用这样的东西
$arr =
array (
array(
'name' => 'Bob',
'category' => '2'
),
array(
'name' => 'Bill',
'category' => '6'
),
array(
'name' => 'John',
'category' => '1'
),
array(
'name' => 'Jack',
'category' => '2'
),
);
$categoryCount = array();
$categoryList = array();
array_map(function($a) use (&$categoryCount, &$categoryList) {
$categoryId = $a['category'];
if (!isset($categoryCount[$categoryId])) {
$categoryCount[$categoryId] = 0;
}
$categoryCount[$categoryId]++;
if (!isset($categoryList[$categoryId])) {
$categoryList[$categoryId] = array();
}
$categoryList[$categoryId][] = $a['name'];
}, $arr);
print_r($categoryCount);
print_r($categoryList);这将创建两个数组:一个具有计数,另一个具有重新排列的元素。
发布于 2015-02-04 15:24:53
我已经写了三个函数,解决了你所描述的标准。请记住,这些函数是最小的,并且缺少错误处理。它还假定所有函数所需的$categories数组都具有您问题中概述的结构。
第一种方法将所有项目重新排列到正确的类别中。
function rearrangeCategories(array $categories) {
$calculated = [];
foreach($categories as $category) {
$calculated[$category['category']][] = $category['name'];
}
return $calculated;
}第二种方法创建一个关联数组,表示每个类别中的项数。数组索引是类别名称/id,值是一个整数,声明项目的数量。
function categoriesCount(array $categories) {
$calculated = [];
$arranged = rearrangeCategories($categories);
foreach($arranged as $category => $values) {
$calculated[$category] = count($values);
}
return $calculated;
}第三个函数检查一个特定类别中存储了多少项。如果类别不存在,则返回FALSE。否则,返回一个整数。
function categoriesItemCount(array $categories, $key) {
$arranged = rearrangeCategories($categories);
if(!array_key_exists($key, $arranged)) {
return false;
}
return count($arranged[$key]);
}我希望这能帮上忙,快乐的编码。
https://stackoverflow.com/questions/28324667
复制相似问题