Pregunta

¿Hay una función de matriz en PHP que de alguna manera hace array_merge, la comparación de los valores de , haciendo caso omiso de las llaves? Creo que las obras array_unique(array_merge($a, $b)), sin embargo, creo que debe haber una manera más agradable de hacer esto.

por ejemplo.

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

resultando en:

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

Tenga en cuenta que no me importa acerca de las claves en $ab, sin embargo, sería bueno si fueran ascendente, a partir de 0 a count($ab)-1.

¿Fue útil?

Solución

El más elegante, simple, y la solución eficiente es el que se menciona en la pregunta original ...

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

Esta respuesta también fue mencionado anteriormente en los comentarios de Ben Lee y doublejosh, pero he publicado aquí como una respuesta real para el beneficio de otras personas que se encuentran esta pregunta y quieren saber cuál es la mejor solución es sin leer toda los comentarios de esta página.

Otros consejos

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

Para responder a la pregunta que se le preguntó, para una solución general que también trabaja con matrices asociativas preservando al mismo tiempo las teclas, creo que se encuentra esta solución más satisfactoria:

/**
 * 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 ignorará teclas numéricas, por lo que en su ejemplo array_merge($a, $b) le daría $ab, no hay necesidad de array_unique() llamada.

Si usted tiene claves de cadena (es decir, una matriz asociativa) el uso array_values() primero:

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);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top