所以我在 PHP 中有以下数据数组
$array = array(
"animal" => "panda",
"location" => "San Diego",
"age" => "2",
),
array(
"animal" => "tiger",
"location" => "Bronx",
"age" => "5",
),
array(
"animal" => "panda",
"location" => "Bronx",
"age" => "3",
),
array(
"animal" => "tiger",
"location" => "bronx",
"age" => "3",
),
array(
"animal" => "panda",
"location" => "San Diego",
"age" => "2",
)
)
我想做的是将其转换成一个关联数组,其中包含动物数量、位置和年龄。因此,如果我想查看圣地亚哥有多少只 2 岁的 Pandas ,我将使用 $newArray['panda']['San Diego']['2']
访问新数组,并且输出将是 2。
我的问题是我可以很容易地运行一个循环并构建一个数组并在它像这样完全静态时计算项目。
foreach($array as $a) {
$newArray[$a['animal']][$a['location']][$a['age']] += 1;
}
但是我想知道当键的数量是动态的时如何完成相同的概念。例如,如果一个电话中只有位置和动物,而有时另一个电话中可能有位置、动物、年龄和性别,会怎样?
我发现有一些示例阐述了如何针对关联数组执行此操作,但不适用于具有此特定用例的多维数组。
有什么想法吗?
最佳答案
理念
在我看来,您似乎想一次做太多事情。与其转换数组以包含所有答案,不如考虑创建一个函数来对其运行查询。
解决方案
/**
* @param array $animals The whole animals array
* @param array $query Array containing keys and values you want to filter by
*
* @return array Animals that match $query
*/
function filterAnimals($animals, $query) {
return array_filter($animals, function ($animal) use ($query) {
// Check if $animal has every key and the corresponding value from $query
foreach ($query as $key => $value) {
if (!isset($animal[$key]) || $animal[$key] != $value) {
return false;
}
}
return true;
});
}
filterAnimals()
过滤您的 $animals
数组,并仅返回与 $query
数组具有公共(public)键和值的动物。搜索来自圣地亚哥的所有 Pandas 将如下所示:
$result = filterAnimals($animals, [
'animal' => 'panda',
'location' => 'San Diego'
]);
然后,如果你愿意,你可以计算$result
:
$count = count($result);
关于php - 计算多维关联数组中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37055690/