I have arrays order (list) by ref :
我有ref的数组顺序(列表):
$a = array('Blue', 'Red', 'Orange', 'Yellow');
And new elements (mixing order + new element) :
和新元素(混合顺序+新元素):
$b = array('Orange', 'Blue', 'Yellow', 'Red', 'Pink');
I want my outcome ($b
) to be, like in $a
order + new(s) element(s) :
我想要我的结果($ b),比如$ a order + new(s)element(s):
Result : Array
(
[0] => Blue
[1] => Red
[2] => Orange
[3] => Yellow
[4] => Pink
)
Any idea in language reference ?
语言参考的任何想法?
2 个解决方案
#1
2
If you want to preserve array indexes doing $a + difference($b-a)
如果你想保留数组索引做$ 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);
outputs
Array
(
[0] => Blue
[1] => Red
[2] => Orange
[3] => Yellow
[4] => Pink
)
If you're not interested in keeping keys values you can also use array_unique with an array_merge:
如果您对保持键值不感兴趣,也可以将array_unique与array_merge一起使用:
$merged = array_unique(array_merge($a, $b)));
print_r($merged);
outputs:
Array
(
[0] => Blue
[1] => Red
[2] => Orange
[3] => Yellow
[8] => Pink
)
#2
0
The solution using usort and array_search functions:
使用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);
The output: Array
输出:数组
(
[0] => Blue
[1] => Red
[2] => Orange
[3] => Yellow
[4] => Pink
)
#1
2
If you want to preserve array indexes doing $a + difference($b-a)
如果你想保留数组索引做$ 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);
outputs
Array
(
[0] => Blue
[1] => Red
[2] => Orange
[3] => Yellow
[4] => Pink
)
If you're not interested in keeping keys values you can also use array_unique with an array_merge:
如果您对保持键值不感兴趣,也可以将array_unique与array_merge一起使用:
$merged = array_unique(array_merge($a, $b)));
print_r($merged);
outputs:
Array
(
[0] => Blue
[1] => Red
[2] => Orange
[3] => Yellow
[8] => Pink
)
#2
0
The solution using usort and array_search functions:
使用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);
The output: Array
输出:数组
(
[0] => Blue
[1] => Red
[2] => Orange
[3] => Yellow
[4] => Pink
)