2011-09-23 100 views
1
$sortPattern= array(1,2,8,4); 
$toSort = array(2,4,8,18,16,26); 

現在,我們必須根據$sortPattern排序$toSort陣列。陣列使用陣列排序

我們應該有結果

$result = array(2,8,4,18,16,26); 

有誰知道函數要做到這一點,或者我們應該有我們自己寫的函數來執行呢?

+1

嗯......我看不到的格局如何與最終的排序順序?但是你可以用'usort()'按你想要的順序排序。 – Spudley

+0

請稍微指定您的排序模式的語法,但不清楚它應該表達什麼。 – hakre

回答

1

是的,你必須編寫自己的排序功能,並將其與usort()一起使用。在你的回調,你會做這樣的事情:

if ($a == $b) { 
    return 0; 
} elseif (array_search($a, $sortPattern) < array_search($b, $sortPattern) { 
    return -1; 
} else { 
    return 1; 
} 
+0

不要處理a和/或b不在排序模式中的情況。 –

0

$sortPattern$toSort什麼樣的影響?

看起來可能:

$result = array_merge(
    array_intersect($sortPattern, $toSort), // 2, 8, 4 
    array_diff($toSort, $sortPattern)  // 18, 16, 26 
);