2016-01-12 36 views
1

这个例子依赖于两个键/值,而不是像我在堆栈溢出中看到的许多其他例子那样。除了通过primary键排序数组以外,我还想按age键对它进行排序,以便我可以在下面实现预期结果。我应该如何修改下面的代码来实现它? CURRENT RESULT有A-6-6键错位,因为我的代码还没有处理它。使用两个不同的键或值排列多维数组

原始数组

$myarray = [ 
    'Z-9-0' => [ 
     'primary' => true, 
     'age' => 55 
    ], 
    'C-7-1' => [ 
     'primary' => false, 
     'age' => 60 
    ], 
    'K-1-9' => [ 
     'primary' => true, 
     'age' => 60 
    ], 
    'C-2-1' => [ 
     'primary' => false, 
     'age' => 40 
    ], 
    'F-6-6' => [ 
     'primary' => true, 
     'age' => 60 
    ], 
    'A-6-6' => [ 
     'primary' => true, 
     'age' => 30 
    ] 
]; 

预期的结果

(
    [F-6-6] => Array 
     (
      [primary] => 1 
      [age] => 60 
     ) 
    [K-1-9] => Array 
     (
      [primary] => 1 
      [age] => 60 
     ) 
    [Z-9-0] => Array 
     (
      [primary] => 1 
      [age] => 55 
     ) 
    [A-6-6] => Array 
     (
      [primary] => 1 
      [age] => 30 
     ) 
    [C-7-1] => Array 
     (
      [primary] => 
      [age] => 60 
     ) 
    [C-2-1] => Array 
     (
      [primary] => 
      [age] => 40 
     ) 
) 

CODE

uasort($myarray, function($a, $b) { 
    return strcmp($b['primary'], $a['primary']); 
}); 

print_r($org); 

当前结果

正如您所见,A-6-6与上述预期结果相比并不合适。所以它应该出现的位置越高,age就越大。

(
    [A-6-6] => Array 
     (
      [primary] => 1 
      [age] => 30 
     ) 
    [F-6-6] => Array 
     (
      [primary] => 1 
      [age] => 60 
     ) 
    [K-1-9] => Array 
     (
      [primary] => 1 
      [age] => 60 
     ) 
    [Z-9-0] => Array 
     (
      [primary] => 1 
      [age] => 55 
     ) 
    [C-7-1] => Array 
     (
      [primary] => 
      [age] => 60 
     ) 
    [C-2-1] => Array 
     (
      [primary] => 
      [age] => 40 
     ) 
) 
+0

我不知道它是否匹配你的问题;不过,你可以快速浏览一下:http://php.net/manual/en/function.uasort.php#114535 –

回答

1

我想你可以添加额外的检查中当“主要”键的值相等”的uasort的“年龄”的关键。

uasort($myarray, function($a, $b) { 
    if ($b['primary'] === $a['primary']) { 
     return $b['age'] > $a['age']; 
    } 
    return strcmp($b['primary'], $a['primary']); 
}); 

Demo

+0

非常好。谢谢。 – BentCoder