13

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

4

5 に答える 5

21

最もエレガントでシンプル、そして効率的な解決策は、元の質問で言及されたものです...

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

この回答は、Ben Leeとdoublejoshのコメントでも以前に言及されていましたが、この質問を見つけて、すべてのコメントを読まずに最善の解決策を知りたい他の人々のために、実際の回答としてここに投稿します。このページ。

于 2014-03-24T02:38:02.577 に答える
2
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;
}
于 2011-01-11T17:59:06.463 に答える
1

尋ねられた質問に答えるために、キーを保持しながら連想配列でも機能する一般的なソリューションについては、このソリューションが最も満足のいくものであることがわかると思います。

/**
 * 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;
}
于 2012-02-10T02:09:49.577 に答える
-1

array_mergeは数値キーを無視するため、この例でarray_merge($a, $b)$ab、を呼び出す必要はありませんarray_unique()

文字列キー(つまり連想配列)がある場合は、array_values()最初に使用します。

array_merge(array_values($a), array_values($b));
于 2011-01-11T17:52:16.507 に答える
-1
$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);
于 2011-01-11T17:53:15.747 に答える