php比较两个数组和ref的订单输出

时间:2017-05-23 15:10:04

标签: php arrays multidimensional-array listings

我有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
 )

语言参考中的任何想法?

2 个答案:

答案 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)

使用usortarray_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
)