我有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 :(得分:2)
如果要保留数组索引执行$ a + difference($ 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
)
答案 1 :(得分:0)
使用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
)