我有一个多维数组:
$arr = array(
array('lions', 'tigers', 'bears'), // count = 3
array('dogs', 'cats'), // count = 2
array('horses', 'pigs', 'cattle', 'sheep', 'chickens') // count = 5
);
我想返回具有最低计数的数组(我不需要知道计数,只需要具有最低计数的数组)。在这种情况下,array('dogs', 'cats')
现在我有:
$lowest = null;
foreach($nodePath as $arr)
{
$lowest = count($arr) < count($lowest) || $lowest == null ? $arr : $lowest;
}
这有效,但我想知道我是否错过了一个更加包含的解决方案,可能使用array_map
,array_walk
或类似功能。
答案 0 :(得分:2)
使用array_map()
和count
作为回调来获取每个数组中的元素数量min()
以获得最小值。然后,要获取最小数组的键 - 使用array_flip()
翻转数组键和值,并访问$min
索引。现在您可以使用该键来获取所需的数组:
$counts = array_map('count', $arr);
$min = min($counts);
$key = array_flip($counts)[$min];
$smallest_arr = $arr[$key];
答案 1 :(得分:2)
将数组映射到另一个数组,其中包含每个子数组的计数。获取此新数组中最小值的键。最小的数组具有最小值的键:
$count = array_map('count', $arr);
$min = array_keys($count , min($count))[0];
var_dump($arr[$min]); // Array ( [0] => dogs [1] => cats )