2015-12-03 5 views
1

У меня есть два массива:Отсортировать массив на основе порядка другого массива

$arr_a = ['A', 'F', 'C', 'D', 'E', 'B']; 
$arr_b = ['D', 'A', 'F']; 

, и мне нужен массив со значениями $ arr_b, которые отсортированы по $ arr_a, как это:

array(3) {[0]=>string(1) "A", [1]=>string(1) "F", [2]=>string(1) "D"} 

Какой был бы лучший способ сделать это?

PS. Все записи в $ arr_b присутствуют в $ arr_a, и в $ arr_b нет двойных записей, и ключи в массиве resultin не имеют значения.

+0

Вы пробовали какие-либо пути до сих пор? Вы можете перебирать $ arr_a, проверяя $ arr_b и создавая только что отформатированный $ arr_c-, но я уверен, что лучший способ сделать это с функцией сортировки, поэтому я оставлю это в комментариях. –

+0

Что делать, если '$ arr_b' содержит больше элементов или элементов, которые не находятся в' $ arr_a'? – AbraCadaver

+0

Будут ли когда-нибудь значения в b, а не в? – Christian

ответ

3

Возможно, это не работа для сортировки. array_intersect() будет возвращать элементы в $arr_a, которые находятся в $arr_b в том порядке, в котором они находятся $arr_a:

$arr_b = array_intersect($arr_a, $arr_b); 

Если вам нужно повторно индекс затем просто использовать array_values() позже.

+0

Черт. Убей мой ответ из воды: D +1 – Christian

+0

Черт меня тоже :) Просто и еще ничего. Нет причин не принимать его в качестве ответа. Ура! – Konservin

2

Это то, что я думаю, что вы хотите, но ваш вопрос не слишком ясен.

$result = array_filter($arr_a, function($item) use($arr_b){ 
    return in_array($item, $arr_b); 
}); 

Какие результаты в

array(3) { 
    [0] = string(1) "A" 
    [1] = string(1) "F" 
    [3] = string(1) "D" 
} 
+0

Еще хороший ответ +1. – AbraCadaver

+0

делает работу именно так, как должно, большое спасибо. Все еще Абракадевер кажется короче и немного умнее. – Konservin

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