我有这样的数组
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
的最大数量,另一个包含最小数量的项目
预期输出
array1(最多)
[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
那么我怎样才能在最大值和最小值范围内实现上述目标?
答案 0 :(得分:1)
您应该首先按数量排序数组。我们会按升序排列,但实际上并不重要。
有几种不同的方法可以实现这一目标。您可以使用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);
答案 1 :(得分:1)
您可以使用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