2013-12-09 55 views
1

讓我說我有一個數組(包括數組(位置,start_date,coord_lng,coord_lat等)的數組($結果))。這個想法是我想用start_date對$ result進行排序,這很簡單,使用array_multisort。哪裏變得越來越困難的是,所有其他陣列(位置,coord_lng,coord_lat等)應該以同樣的方式重組,並且我不知道該怎麼做!php數組排序同步

看着這裏的解決方案提供: PHP: Sort multi-dimension array 我不知道如何適應超過2個陣列...

我產生了這個代碼,但是有什麼更快?

foreach ($row['table'] as $key2 => $row2) 
{ 
    if($key2 != 'debut') 
    { 
     $dates = $results[$key]['table']['debut']; 
     array_multisort($dates, SORT_ASC, $results[$key]['table'][$key2]); 
    } 
} 
$dates = $results[$key]['table']['debut']; 
array_multisort($dates, SORT_ASC, $results[$key]['table']['debut']); 
+1

你不顯示任何數據。例如,哪些應該是排序後。 – AbraCadaver

+0

如果你通過引用傳遞'$ row2'(在循環迭代中使用'&',比如'$ key2 =>&$ row2'),你可能會少用一點內存。然後你可以直接操作'$ row2'而不是調用'$ results [$ key] ['table'] [$ key2]''。話雖如此,我並不認爲儲蓄會特別巨大,儘管你的代碼會更容易理解。 – Anton

回答

0

你需要分佈在不同的陣列值是多少?我更喜歡屬於一起的信息也被編碼在代碼中。這可以很容易地提取一個點(及其所有信息),添加新點以及排序。

在這個例子中它意味着$results看起來像這樣

[ 
    location1, 
    start_date1, 
    etc... 
], 
[ 
    location2, 
    start_date2, 
    etc... 
], 
[ 
    location3, 
    start_date3, 
    etc... 
] 

現在,你可以通過usort()對它們進行排序,並有屬於一個整體仍聚集在一起的值。


我創建了一個小例子(watch it work here

$arr1 = array("foo", "ybar", "baz"); 
$arr2 = array("foo2", "ybar2", "baz2"); 
$arr3 = array("foo3", "ybar3", "baz3"); 

$results = array(); 
foreach ($arr1 as $key=>$value) { 
    $results[] = array(
     'arr1' => $value, 
     'arr2' => $arr2[$key], 
     'arr3' => $arr3[$key], 
    ); 
} 

function sortByArr1($a, $b) { 
    return strcmp($a['arr1'], $b['arr1']); 
} 

usort($results, "sortByArr1"); 

print "<pre>"; 
print_r($results);