Question

Y at-il une fonction de tableau en PHP qui fait en quelque sorte array_merge, en comparant les valeurs , en ignorant les clés? Je pense que les travaux de array_unique(array_merge($a, $b)), mais je crois qu'il doit y avoir une façon plus agréable de le faire.

par exemple.

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

résultat:

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

S'il vous plaît noter que je ne me soucie pas des clés dans $ab, mais il serait bien si elles étaient croissant, à partir de 0 à count($ab)-1.

Était-ce utile?

La solution

Le plus élégant, simple et solution efficace est celui mentionné dans la question initiale ...

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

Cette réponse a également été mentionné précédemment dans les commentaires de Ben Lee et doublejosh, mais je poste ici comme une réponse réelle au profit d'autres personnes qui trouvent cette question et veulent savoir quelle est la meilleure solution est sans lire tout les commentaires sur cette page.

Autres conseils

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

Pour répondre à la question posée, une solution générale qui fonctionne également avec des réseaux associatifs, tout en préservant les clés, je crois que vous trouverez cette solution la plus satisfaisante:

/**
 * 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 ignorera les touches numériques, donc dans votre exemple array_merge($a, $b) vous donnera $ab, il n'y a pas besoin de faire appel array_unique().

si vous avez des clés de chaîne (à savoir un tableau associatif) l'utilisation array_values() premier:

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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top