array_merge&array_unique
-
10-10-2019 - |
質問
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
.
解決
最もエレガントでシンプルで効率的なソリューションは、元の質問で言及されたソリューションです...
$ab = array_unique(array_merge($a, $b));
この答えは、ベン・リーとダブルジョシュによるコメントでも前に言及されていましたが、この質問を見つけて、すべてのコメントを読むことなく最良の解決策が何であるかを知りたい他の人の利益のための実際の答えとしてここに投稿していますこのページ。
他のヒント
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;
}
質問に答えるために、キーを保存しながら連想配列でも機能する一般的なソリューションについては、このソリューションが最も満足できると思います。
/**
* 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_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);
所属していません StackOverflow