2017-08-02 260 views
1

我有一個數組如下:排序數組排序

$aq=['jonathan','paul','andy','rachel']; 

然後,我有一個數組如下:

$bq=['rachel','andy','jonathan']; 

我需要的是使用第一的排序數組來排序我的第二個數組。

因此,對於這種情況下,所產生的數組排序應該是:

$cq=['jonathan','andy','rachel']; 

我開始工作,對使用的最高鍵,作爲最高值(數組的頭)的解決方案,因爲什麼進出口尋找是最高價值,但遇到問題,似乎更像是一個黑客,所以我認爲排序是我在尋找的東西。

有沒有在PHP一個簡單的功能,可以根據我的第一陣列和陣列

+0

如果第一個順序沒有太大關係,那麼您可以用詞法排序(例如兩個升序)來排序,這樣第二個按照正確的順序關聯第一個數組。 – Peter

回答

2

在有相應的位置上我的數據進行排序,請儘量將短期和乾淨的解決方案使用array_intersect

$aq = ['jonathan','paul','andy','rachel']; 

$bq = ['rachel','andy','jonathan']; 

$cq = array_intersect($aq, $bq); 

var_export($cq); 

輸出將是:

array (0 => 'jonathan', 2 => 'andy', 3 => 'rachel',) 
+0

這是一個優雅的答案。 – JakeParis

0

您將不得不使用自定義排序功能。在這裏,我們抓住「排序」數組中相應條目的鍵並使用它們來排列工作陣列。

在這個例子中,如果在排序數組中不存在鍵,我們放棄(返回0)你可能希望定製這種行爲,但是這應該給你一個大概的想法。

$order = ['jonathan','paul','andy','rachel']; 
$arrayToSort =['rachel','andy','jonathan']; 

usort($arrayToSort,function($a,$b) use ($order){ 
    if(! array_key_exists($a,$order)) return 0; 
    if(! array_key_exists($b,$order)) return 0; 

    if(array_search($a,$order) > array_search($b,$order) 
     return 1; 
    return -1; 
});