php 比较两个数组并按 ref 排序输出
php compare two arrays and order output by ref
我有 arrays order (list) by 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 + 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
)
使用usort and 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
)
我有 arrays order (list) by 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 + 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
)
使用usort and 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
)