2014-10-20 178 views
0

我有以下阵列:排序多维数组的整数值

Array 
(
[Address Line 1] => Array 
    (
     [llx] => 18.96 
     [lly] => 28.88999999999999 
    ) 

[Address Line 2] => Array 
    (
     [llx] => 18.73 
     [lly] => 35.66 
    ) 

[City State ZIP Code] => Array 
    (
     [llx] => 18.51 
     [lly] => 47.16999999999999 
    ) 

[Full Name] => Array 
    (
     [llx] => 18.86 
     [lly] => 20.15999999999997 
    ) 

) 

,我想通过它循环,并通过LLY值对其进行排序:所以最后的结果确实应该

Array 
(
[Full Name] => Array 
    (
     [llx] => 18.86 
     [lly] => 20.15999999999997 
    ) 

[Address Line 1] => Array 
    (
     [llx] => 18.96 
     [lly] => 28.88999999999999 
    ) 

[Address Line 2] => Array 
    (
     [llx] => 18.73 
     [lly] => 35.66 
    ) 

[City State ZIP Code] => Array 
    (
     [llx] => 18.51 
     [lly] => 47.16999999999999 
    ) 

) 

完成此任何想法?我一直在查看PHP中的排序功能,但他们似乎主要集中在单维数组,并没有像这样,除非我缺少一些东西

回答

1

Rudie已经为您的具体情况最好的答案,但这里的使用array_multisort

$llx = array(); 
$lly = array(); 
foreach ($array as $key => $row) { 
    $llx[$key] = $row['llx']; 
    $lly[$key] = $row['lly']; 
}; 
array_multisort($lly, SORT_ASC, $llx, $array); 
替代
2

你想要uksort。这很棒。

uksort($array, function($a, $b) { 
    return $a['lly'] - $b['lly']; // might be reverse, I always forget 
}); 
  • usort是 '正常' 的用户排序
  • uksort不相同,但维持键。使用assoc数组,这似乎很有用。

只是以供将来参考,有很多在PHP非常有用的分拣机,像natcasesort(),这种种“自然”和不区分大小写。这些将不会在多维阵列中工作,就像您提到的那样。当然,PHP在一个有用的包中具有相同的功能:strnatcasecmp,因此您可以使用u(k)sort回调来利用natcasesort电源。

其他比较功能在同一功率:strncmp

随便说。