Intereting Posts
Оптимальные методы работы с автозагрузкой Установить сеанс php через ajax введите значение при выполнении Ajax Post с помощью JQuery Отслеживание электронной почты – GMail использование array_search для многомерного массива Как преобразовать PDF-документ в изображение предварительного просмотра в PHP? Как сохранить определенное значение, выбранное в элементе управления HTML в следующем сценарии? Symfony2 MVC: где мой код? Когда я отлаживаю php с переменной var_dump, он всегда выводит путь к файлу в начале? Heroku PHP crash bash: поставщик / bin / heroku-php-apache2: нет такого файла или каталога Пропустите знак процента (%) в URL-адресе и получите точное его значение, используя php Как получить конкретный текст узла с помощью php DOM regex для URL-адреса и изображения в тексте или html MySQL PHP count (*) возвращает что-то странное Использование cURL для получения всех ссылок на веб-сайте (а не только на странице)

array_merge & array_unique

Есть ли функция массива в 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 .

     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; } 

    Самое элегантное, простое и эффективное решение – это тот, который упоминается в первоначальном вопросе …

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

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

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

     /** * array_merge_unique - return an array of unique values, * composed of merging one or more argument array(s). * * As with array_merge, later keys overwrite earlier keys. * Unlike array_merge, however, this rule applies equally to * numeric keys, but does not necessarily preserve the original * numeric keys. */ function array_merge_unique(array $array1 /* [, array $...] */) { $result = array_flip(array_flip($array1)); foreach (array_slice(func_get_args(),1) as $arg) { $result = array_flip( array_flip( array_merge($result,$arg))); } return $result; } 

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

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

     array_merge(array_values($a), array_values($b)); 
     $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);