我有一个这样的数组
Array
(
[0] => Array
(
[items] => 42
[prize] => 122
)
[1] => Array
(
[items] => 14
[prize] => 789
)
[2] => Array
(
[items] => 76
[prize] => 1228
)
[3] => Array
(
[items] => 23
[prize] => 122
)
[4] => Array
(
[items] => 15
[prize] => 567
)
)
由此我想创建两个数组,一个包含最大items
数,另一个包含最小数量的项目
预期产出
阵列1(最大值)
[0] => Array
(
[items] => 76
[prize] => 1228
)
[1] => Array
(
[items] => 42
[prize] => 122
)
[2] => Array
(
[items] => 23
[prize] => 122
)
阵列 2(最小值)
[0] => Array
(
[items] => 15
[prize] => 567
)
[1] => Array
(
[items] => 23
[prize] => 122
)
n
是长度原始数组
if(n is odd)
length firstarr=ceil(n/2);
length secondarr =n- ceil(n/2)
else
length firstarr=secondarr=n/2
那么,我怎样才能用最大值和最小值范围来填充上述值呢?
您应该首先按项目数对数组进行排序。我们将按升序排列,但这真的无关紧要。
有几种不同的方法可以实现此目的。您可以使用array_multisort
但我认为具有匿名函数的usort
更短,更容易遵循。
如果你有 PHP 5.2 或更早版本,则必须将匿名函数代码移动到命名函数中并调用它那边。如果你有幸拥有 PHP 7,你可以在函数中做return $a["items"] <=> $b["items"];
。
$array = [["items" => 42, "prize" => 122], ["items" => 14, "prize" => 789],
["items" => 76, "prize" => 1228], ["items" => 23, "prize" => 122],
["items" => 15, "prize" => 567]];
usort($array, function($a, $b) {
return $a["items"] < $b["items"] ? -1 : ($a["items"] > $b["items"] ? 1 : 0); });
现在将其拆分为最高值和最低值。array_splice
后,$array
变量将只包含尚未删除并保存到 $lowest
中的值。
在您的示例中,最大值按降序排列,而我们的值按升序排列。 array_reverse
将解决此问题。
$lowest = array_splice($array, 0, floor(count($array) / 2));
$highest = array_reverse($array);
var_dump($highest);
var_dump($lowest);
您可以使用 usort()
并将值传递给回调进行比较,注意回调中使用闭包,
<?php
function sort_order($key, $order=1){
if($order==1){
return function ($a, $b) use ($key) {
return strcmp("$a[$key]","$b[$key]");
};
}
else{
return function ($a, $b) use ($key) {
return strcmp("$b[$key]","$a[$key]");
};
}
}
$minimal = array
(
0 => array
(
'items' => 42,
'prize' => 122
),
1 => array
(
'items' => 14,
'prize' => 789
),
2 => array
(
'items' => 76,
'prize' => 1228
),
3 => array
(
'items' => 23,
'prize' => 122
),
4 => array
(
'items' => 15,
'prize' => 567
)
);
$maximum = $minimal;
usort($minimal, sort_order('items'));
usort($maximum, sort_order('items',2));
print_r($minimal);
print_r($maximum);
?>
这是小提琴:https://eval.in/539270