此问题在此处已有答案:
Find row in 2d array with specific value in a column and smallest value in another column(3个答案)
Get earliest Y-m-d date value in a multidimensional array from qualifying rows(5个答案)
5天前关闭。
假设我在PHP中有这个数组:
Array
(
[0] => Array
(
[color] => Yellow
[name] => Banana
[quantity] => 124
)
[1] => Array
(
[color] => Red
[name] => Cherry
[quantity] => 24
)
[2] => Array
(
[color] => Yellow
[name] => Apple
[quantity] => 224
)
)
如果出现以下情况,如何减少此数组:
color
为黄色,quantity
最低
所以从上面的例子中,我应该只有这个数组:
Array
(
[0] => Array
(
[color] => Yellow
[name] => Banana
[quantity] => 124
)
)
到目前为止我已经尝试过:
$min = array_reduce($array, function($min, $details) {
return min($min, $details['quantity']);
}, PHP_INT_MAX);
谢谢你的帮助。
3条答案
按热度按时间bvjxkvbb1#
我试图创建一个更通用的通用函数,可以修改它以适应其他类似的场景,其中输入数组不一定包含问题中引用的键/值。
以上结果为:
如果标准发生变化,并且您需要最高而不是最低,则可以通过修改
$dir
变量来快速实现。gmxoilav2#
我只会使用一个简单的循环,因为它是可读的,很容易理解发生了什么。
输出
如果你想让
$min
仍然是一个像你的例子输出一样的数组,你可以像这样把它添加到一个数组中。输出
0lvr5msh3#
可能的解决方案。
该解决方案考虑了申请人已经创建的内容,完成代码以获得所需的结果。
第一个array_filter选择所有color = 'Yellow'的行,减少要处理的数据集。
使用array_reduce,我们可以找到数量的最小值,就像@F_M所做的那样,但是在较小的数据集上。
最后,使用另一个array_filter,我们将提取具有刚刚找到的值的行。