php сравнивает два массива и выводит порядок по ref

У меня есть порядок массивов (список) по ref:

$a = array('Blue', 'Red', 'Orange', 'Yellow');

И новые элементы (порядок смешивания + новый элемент):

$b = array('Orange', 'Blue', 'Yellow', 'Red', 'Pink');

Я хочу, чтобы мой результат ($b) быть, как в $a заказ + новый (ые) элемент (ы):

Result : Array
(
[0] => Blue
[1] => Red
[2] => Orange
[3] => Yellow
[4] => Pink
)

Любая идея в языковой справке?

0

Решение

Если вы хотите сохранить индексы массива, делая разницу $ a + ($ b-a)

$a = array('Blue', 'Red', 'Orange', 'Yellow');
$b = array('Orange', 'Blue', 'Yellow', 'Red', 'Pink');

$merged = array_merge($a, array_diff($b, $a));
print_r($merged);

выходы

Array
(
[0] => Blue
[1] => Red
[2] => Orange
[3] => Yellow
[4] => Pink
)

Если вы не заинтересованы в сохранении значений ключей, вы также можете использовать array_unique с array_merge:

$merged = array_unique(array_merge($a, $b)));
print_r($merged);

выходы:

Array
(
[0] => Blue
[1] => Red
[2] => Orange
[3] => Yellow
[8] => Pink
)
2

Другие решения

Решение с использованием usort а также array_search функции:

$a = ['Blue', 'Red', 'Orange', 'Yellow'];
$b = ['Orange', 'Blue', 'Yellow', 'Red', 'Pink'];

usort($b, function($x, $y) use ($a){
$idx_x = array_search($x, $a);
$idx_y = array_search($y, $a);
if ($idx_x === false || $idx_y === false) return 1;
return $idx_x - $idx_y;
});

print_r($b);

Выход:
массив

(
[0] => Blue
[1] => Red
[2] => Orange
[3] => Yellow
[4] => Pink
)
0

По вопросам рекламы [email protected]