2015-06-09 87 views
-3
$options = array(
array("title" => "L", "value" => "L"), 
array("title" => "XL", "value" => "XL"), 
array("title" => "S", "value" => "S"), 
array("title" => "M", "value" => "M"),); 


$options2 = array(
array("title" => "S", "value" => "S"), 
array("title" => "M", "value" => "M"), 
array("title" => "L", "value" => "L"), 
array("title" => "XL", "value" => "XL"),); 

the final data should be look like: 
$options3 = array('S','M','L','XL'); 

我想重新排列$ options排序$ options2值;從其他陣列重新排列多維數組

的情況下是像php - sort an array by key to match another array's order by key

+0

你有沒有嘗試過的東西,這將是預期的輸出? – Rizier123

+0

@ Rizier123結果應該與$ options2相同 – andesign

+0

如果你已經有'$ options2'爲什麼你不能使用這個數組? – Rizier123

回答

0

兩個陣列具有任意順序。你想重新安排第一個數組與第二個數組具有相同的順序,對嗎?

Alogrithm:遍歷第二個數組(並跟蹤當前位置),並且爲每個項搜索第一個數組中的等價項(從當前位置向前),然後將其交換爲當前位置位置。

僞代碼:

for (curr_pos=0; curr_pos<options2.length; curr_pos++) 
    for (pos=curr_pos; pos<options.length; pos++) 
    if options2[curr_pos]==options[pos]: 
     swap options[curr_pos], options[pos] 
     break 

如果你可以使用額外的空間,那麼它會使用散列地圖更高效:

h=new HashMap() 
for (pos=0; pos<options.length; pos++) 
    h[options[pos].key]=options[pos].val 
for (pos=0; pos<options2.length; pos++) 
    options3[pos]= make_pair(options2[pos].key, h[options2[pos].key]) 
+0

ps this can也可以通過將第一個數組的項放入哈希表中並使用它來找到它們的位置來更快地完成,這將使算法O(N)時間和O(N)空間,而不是O(N^2)時間,O(1)空間如上所示 –

+0

是我想安排第一個數組與第二個數組的順序相同 – andesign

0

這可以使用array_shift PHP函數來完成。

請使用自定義函數rearrange_array。

function rearrange_array($array, $key) { 
 
\t \t while ($key > 0) { 
 
\t \t \t $temp = array_shift($array); 
 
\t \t \t $array[] = $temp; 
 
\t \t \t $key--; 
 
\t \t } 
 
\t \t return $array; 
 
\t } 
 
\t 
 
\t 
 
\t $finalArray = rearrange_array($options,2);