获取多维数组PHP中最小的键数组值



那么,我得到了一个像这样的数组:

[65]=>
array(2) {
[0]=>
array(2) {
["p"]=>
float(234)
["sp"]=>
float(234)
}
[1]=>
array(2) {
["p"]=>
float(53)
["sp"]=>
float(5)
}
[2]...
[3]...
}

我们的想法是遍历key 65数组的0 - N个值,只保留最小的" ",其他的应该被删除/过滤掉。

这应该在PHP中完成。有人知道吗?

我试过这样做:

$array = array_filter($array, function ($value, $key) use ($a) {
return $a['p'] <= $value['p'];
}, ARRAY_FILTER_USE_BOTH);

,其中$value是65键数组中元素的1个,$a是动态添加的当前对。所以当它被添加时,我遍历现有的元素,如果它是最低的,它应该保留,其他的会被立即过滤掉,但如果它更高,它应该被自动过滤掉。

谢谢!

您可以使用array_reduce()获取最低的" "-value:

$arr = [
65 => [
["p" => 234, "sp" => 234],
["p" => 53, "sp" => 5],
["p" => 530, "sp" => 5],
]
];
function getLowestKey($carry, $item) {
if ($item['p'] < $carry || !$carry) {
$carry = $item['p'];
}
return $carry;
}
$lowestKey = array_reduce($arr[65], 'getLowestKey');
var_dump($lowestKey); // int(53)

编辑:

我刚刚注意到你的问题还有第二部分,抱歉。一旦你找到了"最低的"然后,您可以使用该知识筛选数组:

$lowestPs = array_filter($arr[65], function($item) use ($lowestKey) {
return $item['p'] == $lowestKey;
});
var_dump($lowestPs);
/*
array(2) {
[1]=>
array(2) {
["p"]=>
int(53)
["sp"]=>
int(5)
}
[2]=>
array(2) {
["p"]=>
int(53)
["sp"]=>
int(5)
}
}
*/

此解决方案即使多个条目具有相同的最低" "值(如上面示例中的53),所有这些都将保留。

使用array_column()对键65内的记录的'p'值执行array_multisort()

<?php
$col = 'p'; // set the column you want to order on
$column = array_column($arr[65], $col);
array_multisort($column, SORT_ASC, $arr[65]);
$arr[65] = $arr[65][0]; // only keep the record with lowest 'p' value

演示

如果有超过1个嵌套的级别,您还可以使用递归方法检查p的值,保留值最低的数组。

$arrays = [
65 => [
["p" => 234, "sp" => 234],
[
["p" => 53,"sp" => 5],
[
["p" => 54,"sp" => 1],
["p" => 53,"sp" => 7],
]
], [
"p" => 255,
"sp" => 235
],
]
];
function loop($array, &$coll = [], &$min = null)
{
foreach ($array as $key => $value) {
if (is_array($value)) {
loop($value, $coll, $min);
} elseif ($key === "p") {
if ($min === null) $min = $value;
if ($min > $value) {
$coll = [$array];
$min = $value;
continue;
}
if($value === $min) $coll[] = $array;
}
}
return $coll;
}
$arrays[65] = loop($arrays[65]);
var_dump($arrays);

输出
array(1) {
[65]=>
array(2) {
[0]=>
array(2) {
["p"]=>
int(53)
["sp"]=>
int(5)
}
[1]=>
array(2) {
["p"]=>
int(53)
["sp"]=>
int(7)
}
}
}

查看另一个php演示。

最新更新