【问题标题】:php compare two arrays and order output by refphp比较两个数组并按ref排序输出
【发布时间】:2017-05-23 15:10:03
【问题描述】:

我有数组按 ref 排序(列表):

$a = array('Blue', 'Red', 'Orange', 'Yellow');

还有新元素(混合顺序+新元素):

$b = array('Orange', 'Blue', 'Yellow', 'Red', 'Pink');

我希望我的结果 ($b) 像 $a order + new(s) element(s) 一样:

Result : Array
 (
 [0] => Blue
 [1] => Red
 [2] => Orange
 [3] => Yellow
 [4] => Pink
 )

语言参考有什么想法吗?

【问题讨论】:

  • 使用array_diff获取$b中的新元素,并追加到$a得到结果。
  • SO 不是免费的编码服务。您必须自己尝试解决问题。如果您无法使其正常工作,请发布您尝试过的内容,我们会帮助您解决问题。
  • 这里太快了。谢谢大家帮助我,如果我能帮助别人,我会像 Ace_Gentile 一样。 G.

标签: php arrays multidimensional-array listings


【解决方案1】:

如果你想保留数组索引做 $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
)

【讨论】:

  • 这不一定能保持秩序。您需要结合使用array_diff()array_merge() 来获得想要的结果。
  • @Phylogenesis:OP 没有提到任何关于保持秩序的事情。
  • 来自问题:“我希望我的结果 ($b) 像 $a order + new(s) element(s)”
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    • 1970-01-01
    相关资源
    最近更新 更多