0

私は次のテスト済みコードを持っています。これは、数回試行した後、2 つのマージされた配列から一意の結果をフィルター処理するジョブを実行します。以前、次のように解決するまで、array_diff、array_diff_key、array_diff_assoc を使用してみましたが、役に立ちませんでした。

  • 2 つ目は、最初に array_filter を使用して空の値 (0 など) を除外する必要があります。そうしないと、予期しないマージ結果に空の値 ("red" => "0") も出力されます。
  • array_unique は、重複をマージから削除します。

ということで、以下は期待通りに動いているのですが、ちょっとぐるぐる回っているように見えるコードに何か改善点はないのかなと思います。コードが適切に作成されているかどうか確信が持てないということです。

$array1 = array("a" => "green", "b" => "purple", "blue" => "0");
$array2 = array("a" => "0", "b" => "purple", "blue" => "blue", "red" => "0");

$merge  = array_unique(array_merge($array1, array_values(array_filter($array2))));

どんな改善も大歓迎です。ありがとう

更新: 申し訳ありませんが、私は要件の後半で進化していましたが、ペアが両方に存在する場合に NULL が返された場合でも、最初の array1 を array2 に置き換えることも検討する必要があることに後で気付きました。応接室に戻ったほうがいい。ありがとう

4

2 に答える 2

2

私はあなたが望むものを正確に取得しますが、あなたのコードの結果によると、私はこれまたはこのようなものがあなたのために働くと思います。

$merge = $array1 + array_filter($array2);

于 2012-11-24T05:52:07.030 に答える
1

あなたのコードもarray1から空の値を書き込んでいます

array_merge はマージ重複値を自動的に削除するため、array_unique を使用する必要はありません

$array1 = array("a" => "green", "b" => "purple", "blue" => "0");
$array2 = array("a" => "0", "b" => "紫", "青" => "青", "赤" => "0");
$merge = array_merge($array1, array_filter($array2));

于 2012-11-24T04:28:35.093 に答える