Frage

Gibt es eine Array-Funktion in PHP, die irgendwie array_merge tut, die Werte zu vergleichen , die Schlüssel zu ignorieren? Ich denke, dass array_unique(array_merge($a, $b)) funktioniert, aber ich glaube, es muss eine schönere Art und Weise, dies zu tun.

zB.

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

ergibt:

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

Bitte beachten Sie, dass ich nicht über die Schlüssel in $ab egal, aber es wäre schön , wenn sie aufsteigen, bei 0 bis count($ab)-1 starten.

War es hilfreich?

Lösung

Die elegante, einfache und effiziente Lösung ist die in der ursprünglichen Frage erwähnt ...

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

wurde auch diese Antwort bereits in den Kommentaren von Ben Lee und doublejosh erwähnt, aber ich bin hier als eine tatsächliche Antwort zum Wohl anderer Menschen Entsendung, die diese Frage zu finden und will wissen, was die beste Lösung ist, ohne alle lesen die Kommentare auf dieser Seite.

Andere Tipps

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

Um die Frage zu beantworten, wie gefragt, für eine allgemeine Lösung, die auch mit assoziativer Arrays arbeitet, während Schlüssel zu bewahren, ich glaube, dass Sie diese Lösung sehr zufriedenstellend finden:

/**
 * 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 werden Zifferntasten ignorieren, so in Ihrem Beispiel array_merge($a, $b) würden Sie $ab, gibt es keine Notwendigkeit, um den Anruf array_unique().

Wenn Sie String-Schlüssel (das heißt ein assoziatives Array) Verwendung array_values() zuerst:

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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top