2013-02-25 163 views
4
$original_ids = array(1, 2, 3, 4); //<--- Original values without sorted. 
$sorted_ids = array(4, 1, 3); //<--- Fixed values (sort by this) 
$result_ids = array(); //<--- The result array after sorted 

我只是想通過$sorted_ids重新檢查陣列匹配和排序(如果你懂的)自定義數組排序

$ result_ids必須... array(4, 1, 3, 2)(是不是在$ original_ids陣列等等把它放在最後

我綁在這樣的代碼...:

foreach ($sorted_ids as &$id) { 
    if (in_array($id , $original_ids)) { 
     $result_ids[] = $id; 
    } else { 

    } 
} 

但我不知道如何將不匹配的數組推到$ result_ids數組的最後。

評論如果你不明白。

回答

1
$result_ids = array_merge(
    array_intersect($sorted_ids, $original_ids), // the values that match sorter 
    array_diff($original_ids, $sorted_ids)  // append the rest 
); 
1
foreach ($sorted_ids as $id) { 
    if (in_array($id , $original_ids)) { 
     $result_ids[] = $id; 
    } else { 
     $addToEnd[] = $id 
    } 
} 

array_merge($result_ids, $addToEnd); 

您使用&$id是無意義的順便說一句,因爲你推它的價值。你不需要參考。

+0

天上感謝您的想法:d – l2aelba 2013-02-25 13:08:08

0
$original_ids = array(1, 2, 3, 4); 
$sorted_ids = array(4, 1, 3); 
foreach($original_ids as $key=>$val){ 
    if(in_array($val,$sorted_ids)){ 
     unset($original_ids[$key]); 
    } 
} 

$result_ids = array_merge($sorted_ids,$original_ids); 

print_r($result_ids); 
1
array_merge($sorted_ids, array_diff($original_ids, $sorted_ids)) 
+0

注意,這也將增加值在分揀機中存在,但不在原始數組中 – 2013-02-25 13:14:19

+0

呃我不瞭解你,所以你c在array_merge中使用array_intersect – sanj 2013-02-25 13:19:47

0

您可以使用此代碼:

<?php 

foreach ($sorted_ids as &$id) { 
    if (sort($id)) { 
     $result_ids[] = $id; 
    } else { 

    } 
} 

?> 

它會做什麼,你需要