У меня есть порядок массивов (список) по 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
)
Любая идея в языковой справке?
Если вы хотите сохранить индексы массива, делая разницу $ 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
)
Решение с использованием 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
)