2016-08-23 91 views
0

我有一个看起来像这样的数组:排序功能

Array ([0] => Array ([id] => 1103 [age] => 37 [gen] => C:3:2:5:1:4) [1] => Array ([id] => 1104 [age] => 37 [gen] => A:3:1:4:1) [2] => Array ([id] => 1105 [age] => 36 [gen] => A:3:2:3:2 ) [3] => Array ([id] => 1106 [age] => 32 [gen] => B:2:5:1:2:2) [4] => Array ([id] => 1107 [age] => 31 [gen] => C:3:4:4:5:3 [5] => Array ([id] => 1104 [age] => 37 [gen] => A:3:1:4:1:6)) 

我想由根密钥对数组进行排序,因此结果会是这样的:

答: 3:1:4:1:6

甲:3:2:3:2

B:2:5:1:2:2

C:3:2:5:1 :4

C:3:4:4:5:3

我试过这段代码:

uasort($newArray, function($a, $b) { 
     return strnatcasecmp($a['ngen'], $b['ngen']); 
    }); 

但不容得到正确的结果。有任何想法吗?

+0

为什么你使用'$ A [当数组键是'gen'时,在你的排序函数中''ngen']? – roberto06

+1

它不是$ a ['gen']和$ b ['gen']? – lippoliv

回答

0

该功能将帮助您对数组进行排序,只是路过该数组是要排序的关键。

function build_sorter($key) 
{ 
    return function ($a, $b) use ($key) { 
     return strnatcmp($a[$key], $b[$key]); 
    }; 
} 

示例代码:

$results = array(0 => array ('id' => 1103, 'age' => 37, 'gen' => 'C:3:2:5:1:4'), 
        1 => array ('id' => 1104, 'age' => 37, 'gen' => 'A:3:1:4:1'), 
        2 => array ('id' => 1105, 'age' => 36, 'gen' => 'A:3:2:3:2'), 
        3 => array ('id' => 1106, 'age' => 32, 'gen' => 'B:2:5:1:2:2'), 
        4 => array ('id' => 1107, 'age' => 31, 'gen' => 'C:3:4:4:5:3'), 
        5 => array ('id' => 1104, 'age' => 37, 'gen' => 'A:3:1:4:1:6') 
       ); 

usort($results, build_sorter('gen')); 
echo "<pre>"; print_r($results) ; 

只需拨打usort回调build_sorter('gen')并通过关键gen

这将不亦乐乎你:

Array 
(
    [0] => Array 
     (
      [id] => 1104 
      [age] => 37 
      [gen] => A:3:1:4:1 
     ) 

    [1] => Array 
     (
      [id] => 1104 
      [age] => 37 
      [gen] => A:3:1:4:1:6 
     ) 

    [2] => Array 
     (
      [id] => 1105 
      [age] => 36 
      [gen] => A:3:2:3:2 
     ) 

    [3] => Array 
     (
      [id] => 1106 
      [age] => 32 
      [gen] => B:2:5:1:2:2 
     ) 

    [4] => Array 
     (
      [id] => 1103 
      [age] => 37 
      [gen] => C:3:2:5:1:4 
     ) 

    [5] => Array 
     (
      [id] => 1107 
      [age] => 31 
      [gen] => C:3:4:4:5:3 
     ) 

) 
+0

感谢Manjeet为您的快速回答! 真正简单而有用的功能,工作完美。 – Michael

+0

@迈克尔欢迎亲爱的高兴地帮助你:)开心编码:) –

0
<?php 

$ar = [ 
    ["id" => 1103, "age" => 37, "gen" => "C:3:2:5:1:4"], 
    ["id" => 1104, "age" => 37, "gen" => "A:3:1:4:1"], 
    ["id" => 1105, "age" => 36, "gen" => "A:3:2:3:2"], 
    ["id" => 1106, "age" => 32, "gen" => "B:2:5:1:2:2"], 
    ["id" => 1107, "age" => 31, "gen" => "C:3:4:4:5:3"], 
    ["id" => 1108, "age" => 37, "gen" => "A:3:1:4:1:6"], 
    ]; 

usort($ar, function ($a, $b) { 
    return strcmp($a['gen'], $b['gen']); 
}); 

foreach($ar as $r) 
    echo($r['id'] . " " . $r['gen'] . PHP_EOL); 

会给你:

1104 A:3:1:4:1 
1108 A:3:1:4:1:6 
1105 A:3:2:3:2 
1106 B:2:5:1:2:2 
1103 C:3:2:5:1:4 
1107 C:3:4:4:5:3