2015-04-30 32 views
3

排序由值多维数组是相当容易的,并已已经在这里回答了多次排序多维数组由值符合条件

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摩托车。 那么到底它应该是这样的

​​

正如你所看到的,而$car1$motorcycle1快,摩托车来早。

的事情是,当我有两个不同的阵列

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

$motorcycles = [$motorcycle1] 

我可以简单地拼接它,就像

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

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

回答

1

好,最简单的办法

$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

+0

谢谢!要尝试一下,然后回来 – Musterknabe

+0

@Musterknabe我认为你可能碰到的最大问题是在迭代时拼接数组时遇到的内部指针。我不确定那将如何解决。 –

+0

太棒了!作品。我修改它像这样(现在用我的真实代码) http://pastebin.com/DN1dRZX3 :) – Musterknabe