array_merge & array_unique - PullRequest
       45

array_merge & array_unique

8 голосов
/ 11 января 2011

Есть ли в PHP функция массива, которая каким-то образом выполняет array_merge, сравнивая значения , игнорируя ключи?Я думаю, что array_unique(array_merge($a, $b)) работает, однако я считаю, что должен быть более хороший способ сделать это.

например.

$a = array(0 => 0, 1 => 1, 2 => 2);
$b = array(0 => 2, 1 => 3, 2 => 4);

, что приводит к:

$ab = array(0 => 0, 1 => 1, 2 => 2, 3 => 3, 4 => 4);

Обратите внимание, что мне не нужны ключи в $ab, однако было бы неплохо , если бы они поднимались, начиная с 0 до count($ab)-1.

Ответы [ 5 ]

13 голосов
/ 24 марта 2014

Самое элегантное, простое и эффективное решение - это упомянутое в первоначальном вопросе ...

$ab = array_unique(array_merge($a, $b));

Этот ответ также ранее упоминался в комментариях Бена Ли и doublejosh, но яразмещение его здесь в качестве фактического ответа для других людей, которые находят этот вопрос и хотят знать, каково лучшее решение, не читая все комментарии на этой странице.

3 голосов
/ 11 января 2011
function umerge($arrays){
 $result = array();
 foreach($arrays as $array){
  $array = (array) $array;
  foreach($array as $value){
   if(array_search($value,$result)===false)$result[]=$value;
  }
 }
 return $result;
}
1 голос
/ 10 февраля 2012

Чтобы ответить на заданный вопрос, для общего решения, которое также работает с ассоциативными массивами при сохранении ключей, я считаю, что вы найдете это решение наиболее удовлетворительным:

0 голосов
/ 11 января 2011
$a = array(0 => 0, 1 => 1, 2 => 2);
$b = array(0 => 2, 1 => 3, 2 => 4);

//add any from b to a that do not exist in a
foreach($b as $item){


    if(!in_array($item,$b)){
        $a[] = $item
    }

}

//sort the array
sort($a);
0 голосов
/ 11 января 2011

array_merge будет игнорировать цифровые ключи, поэтому в вашем примере array_merge($a, $b) даст вам $ab, нет необходимости вызывать array_unique().

если у вас есть строковые ключи (то есть ассоциативный массив), сначала используйте array_values():

array_merge(array_values($a), array_values($b));
...