如何相交将两个数组按数组值合并

时间:2019-02-15 06:55:19

标签: php

我必须进行数组处理,在文本字段中可能会得到重复的数据,我想将两个数组合并为一个具有唯一文本的

$a = array(
    array(
        'domain' => 'default',
        'text' => 'a',
    ),
    array(
        'domain' => 'default',
        'text' => 'b',
    ),
);
$b = array(
    array(
        'domain' => 'default',
        'text' => 'a',
    ),
    array(
        'domain' => 'default',
        'text' => 'c',
    ),
);

预期结果

array(
    array(
        'domain' => 'default',
        'text' => 'a',
    ),
    array(
        'domain' => 'default',
        'text' => 'c',
    ),
    array(
        'domain' => 'default',
        'text' => 'b',
    ),
);

这就是我现在的做法

$merged = array_merge($a, $b);
$extractText = array_map(function($item) {
    return $item['text'];
}, $merged);
$result = array_map(function($item) {
    return array(
        'domain' => 'default',
        'text' => $item
    );
}, array_unique($extractText));
var_dump($result);

寻找原始的PHP方法或另一种更有效的方法来实现这一目标。

2 个答案:

答案 0 :(得分:4)

这应该有效-

$merged =array_merge($a, $b);
array_unique($merged, SORT_REGULAR);

输出

array:3 [▼
  0 => array:2 [▼
    "domain" => "default"
    "text" => "a"
  ]
  1 => array:2 [▼
    "domain" => "default"
    "text" => "b"
  ]
  3 => array:2 [▼
    "domain" => "default"
    "text" => "c"
  ]
]

array_unique()

  

SORT_REGULAR-正常比较项目(不要更改类型)

答案 1 :(得分:1)

您可以使用array_unique来完成这项工作,技巧是必须将SORT_REGULAR指定为第二个参数。这样可以防止array_unique尝试将数组值转换为字符串:

$result = array_unique(array_merge($a, $b), SORT_REGULAR);
print_r($result);

输出:

Array (
    [0] => Array (
        [domain] => default
        [text] => a
    )
    [1] => Array (
        [domain] => default
        [text] => b
    )
    [3] => Array (
        [domain] => default
        [text] => c
    )
)

Demo on 3v4l.org