2013-12-09 4 views
1

let say У меня есть один массив ($ results), содержащий массивы (location, start_date, coord_lng, coord_lat и т. Д.). Идея состоит в том, что я хотел бы отсортировать $ result по start_date, что довольно просто, используя array_multisort. Там, где становится все труднее, все остальные массивы (location, coord_lng, coord_lat и т. Д.) Должны быть реорганизованы одинаково, и я не знаю, как это сделать!php array sort synchronize

глядя на решении, представленный здесь: 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);