我有一个包含水果和蔬菜的阵列,它们都是混合在一起的。我想按类型对每个项目进行分组,即“蔬菜”(由值= 1表示)或“水果”(由值= 2表示),然后按照分配给它的顺序放置每个项目。
这是我的起始数组:
array(3) {
[0]=>
array(16) {
["name"]=> "apples"
["position"]=> "1"
["basket"]=> "2"
}
[1]=>
array(16) {
["name"]=> "potatoes"
["position"]=> "2"
["basket"]=> "1"
}
[2]=>
array(16) {
["name"]=> "onions"
["position"]=> "1"
["basket"]=> "1"
}
[3]=>
array(16) {
["name"]=> "oranges"
["position"]=> "3"
["basket"]=> "2"
}
[4]=>
array(16) {
["name"]=> "tomatoes"
["position"]=> "4"
["basket"]=> "1"
}
[5]=>
array(16) {
["name"]=> "grapes"
["position"]=> "5"
["basket"]=> "2"
}
[6]=>
array(16) {
["name"]=> "avocado"
["position"]=> "2"
["basket"]=> "2"
}
[7]=>
array(16) {
["name"]=> "bean"
["position"]=> "5"
["basket"]=> "1"
}
[8]=>
array(16) {
["name"]=> "pineapple"
["position"]=> "4"
["basket"]=> "2"
}
[9]=>
array(16) {
["name"]=> "pepper"
["position"]=> "3"
["basket"]=> "1"
}
}
以下是我想要实现的结果:
array(3) {
[0]=>
array(16) {
["name"]=> "onions"
["position"]=> "1"
["basket"]=> "1"
}
[1]=>
array(16) {
["name"]=> "potatoes"
["position"]=> "2"
["basket"]=> "1"
}
[2]=>
array(16) {
["name"]=> "pepper"
["position"]=> "3"
["basket"]=> "1"
}
[3]=>
array(16) {
["name"]=> "tomatoes"
["position"]=> "4"
["basket"]=> "1"
}
[4]=>
array(16) {
["name"]=> "bean"
["position"]=> "5"
["basket"]=> "1"
}
[5]=>
array(16) {
["name"]=> "apples"
["position"]=> "1"
["basket"]=> "2"
}
[6]=>
array(16) {
["name"]=> "avocado"
["position"]=> "2"
["basket"]=> "2"
}
[7]=>
array(16) {
["name"]=> "oranges"
["position"]=> "3"
["basket"]=> "2"
}
[8]=>
array(16) {
["name"]=> "pineapple"
["position"]=> "4"
["basket"]=> "2"
}
[9]=>
array(16) {
["name"]=> "grapes"
["position"]=> "5"
["basket"]=> "2"
}
}
在“有希望”的结果中,可以看出“篮子”字段有 2 组,即 1 & 2 ,因此必须“排序”数组,使其按顺序“分组”。
最后,每个“组”项必须按照自己的顺序排序。
这就是我到目前为止:
uasort($array, function($a, $b) {return $a['basket'] - $b['basket'];});
我可以根据自己的需要进行调整吗?
答案 0 :(得分:2)
从PHP 5.3开始,可以使用匿名函数:
uasort($array, function($a,$b)
{
return $a['basket'] - $b['basket'] ?: $a['position'] - $b['position'];
});
这与B. Desai& Sons提供的解决方案相结合。 Casimir et Hippolyte
答案 1 :(得分:1)
你必须为同一个篮子放置条件并且在有同一个篮子时明智地排序
function sort_myarray($a,$b)
{
if($a['basket'] == $b['basket'])
{
return $a['position'] - $b['position'];
}
else {
return $a['basket'] - $b['basket'];
}
}
uasort($array,"sort_myarray");
修改强>
正如Casimir et Hippolyte建议你也可以通过
来缩短代码function sort_myarray($a,$b)
{
return $a['basket'] - $b['basket'] ?: $a['position'] - $b['position'];
}
答案 2 :(得分:0)
可能不是最好的方法,但试试这个:
$a = "your array";
function sort_by_position($a, $b)
{
return $a['position'] - $b['position'];
}
usort($a, 'sort_by_position');
$b = [];
foreach ($a as $k=>$v) {
$b[$v['basket']][] = $a[$k];
}
print_r($b)