2013-02-25 2 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

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

Обратите внимание, что это будет также добавить значения, которые присутствуют в сортировщике, но не в исходном массиве –

+0

Ухх Я тебя не понял, поэтому вы c использование array_intersect в array_merge – sanj

0

вы можете использовать этот код:

<?php 

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

    } 
} 

?> 

он будет делать именно то, что вам нужно

Смежные вопросы