php – 计算多维关联数组中的项目
发布时间:2020-12-13 17:50:16 所属栏目:PHP教程 来源:网络整理
导读:所以我在 PHP中有以下数据数组 $array = array( "animal" = "panda","location" = "San Diego","age" = "2",),array( "animal" = "tiger","location" = "Bronx","age" = "5",array( "animal" = "panda","age" = "3","location" = "bronx",)) 我想要做的是将
所以我在
PHP中有以下数据数组
$array = array( "animal" => "panda","location" => "San Diego","age" => "2",),array( "animal" => "tiger","location" => "Bronx","age" => "5",array( "animal" => "panda","age" => "3","location" => "bronx",) ) 我想要做的是将其转换为一个关联数组,其中包含动物,位置和年龄的计数.所以,如果我想看看圣地亚哥有多少只大熊猫并且是2岁,我会用$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数组的公共键和值的动物.搜索圣地亚哥的所有大熊猫将如下所示: $result = filterAnimals($animals,[ 'animal' => 'panda','location' => 'San Diego' ]); 然后,如果您愿意,您可以计算$result: $count = count($result); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |