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

时间:2022-10-23 12:48:38

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
)