查找多维数组中最短的数组计数



我有一个多维数组:

$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_maparray_walk或类似的函数。

使用array_map()count作为回调来获取每个数组中的元素数量,min()获得最小值。然后,要获得最小数组的键,请使用array_flip()翻转数组的键和值,并访问第$min个索引。现在你可以使用密钥来获得你需要的阵列:

$counts = array_map('count', $arr);
$min = min($counts);
$key = array_flip($counts)[$min];
$smallest_arr = $arr[$key];

演示

使用每个子数组的计数将数组映射到另一个数组。获取此新数组中最小值的键。最小数组具有最小值的关键字:

$count = array_map('count', $arr);
$min = array_keys($count , min($count))[0];
var_dump($arr[$min]); // Array ( [0] => dogs [1] => cats )

中的评估

最新更新