2013-02-25 128 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 { 

    } 
} 

?> 

它会做什么,你需要