php - 使用条件按值对多维数组进行排序

标签 php arrays sorting multidimensional-array

按值对多维数组进行排序相当简单,这里已经回答了多次

usort($myArray, function($a, $b) {
    return $a['field'] - $b['field'];
});

我现在遇到的问题是,我需要另一个条件。假设我有一个包含 10 辆汽车和 10 辆摩托车的数组。这些汽车和摩托车都是一个数组/对象,其值包含一个字段 speed。喜欢

$car1 = [
    'speed' => 100,
    'type' => 'car'
]
$car2 = [
    'speed' => 120,
    'type' => 'car'
]
$car3 = [
    'speed' => 180,
    'type' => 'car'
]
$motorcycle1 = [
    'speed' => 80,
    'type' => 'motorcycle'
]

这些都存储在一个数组中

$vechicles = [$car1, $car2, $car3, $motorcycle1]

我现在要做的是按速度排序。正如我所说,这很容易

usort($myArray, function($a, $b) {
        return $a['speed'] - $b['speed'];
});

我现在面临的问题是,无论速度值如何,至少每三辆车必须是摩托车。可以,第一个条目是摩托车,没关系,但不可能都是汽车。它总是必须至少是一辆摩托车。无论是 1、2 还是 3 辆摩托车在这里都没有关系。 所以最后应该是这样的

$finalArray = [$car3, $car2, $motorcycle1, $car1];

如您所见,虽然 $car1$motorcycle1 快,但摩托车来得更早。

问题是,当我有两个不同的数组时

$cars = [$car1, $car2, $car3]

$motorcycles = [$motorcycle1]

我可以简单地把它拼接进去,比如

array_splice($cars, 2, 0, $motorcycles[0]);

但后来我遇到了无法按速度排序的问题。有没有办法做到这一点?

最佳答案

好吧,最简单的解决方案

$vehicles = [...]; // sorted by speed already

$count = count($vehicles);
$temp = 0;

foreach($vehicles as $key => $veh){

    if(is_car($veh)){
        $temp++;
    }else{
        $temp = 0;
    }

    if($temp == 3){

        for($i = $key + 1; $i<=$count; $i++){

            if(is_motorcycle($vehicles[$i])){

                array_splice($vehicles, $key, 0, $vehicles[$i]);
                break;

            }

        }
        $temp = 0;

    }

}

显然这不是工作代码,我写它只是为了说明我的想法,如果你认为你可以从中受益,祝你调整愉快! :P

关于php - 使用条件按值对多维数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29970895/

相关文章:

php - 如何将变量插入 PHP 数组?

php - jquery 复选框点击不工作

php - str_getcsv 示例

c - 不使用 [ 或 ] 查找数组中元素的总和

c - 如何在 C 中分配新的字符串值

html - CSS 3d 正确排序立方体绘图顺序

PHP 添加用户到收藏夹系统?

java - 从一副 52 副牌中处理 7 个随机非重复 "cards"

python - 对具有多个条件的元组列表进行排序

javascript - 如何对谷歌可视化数据数组进行排序