質問: ''; ``` PHPでforeach文を使わずに、 $array1のidと$array2の中身をそれぞれ比較して 一致した$array1のnameを$name_listにカンマ区切りで入れる方法をご教授願いたいです。 日本語が下手で申し訳ありませんが、よろしくお願い致します。 追記: 失礼いたしました。$name_listは配列ではありません。修正致しました。 想定している結果は ``` tanaka,yosida ``` です。 ### 補足情報(言語/FW/ツール等のバージョンなど) PHP5.6
回答: 1行でできてしまいました。 ``` $name_list = array_values(array_intersect_key(array_column($array1, 'name', 'id'), array_flip($array2))); ``` 3v4l.orgで動作させた例 まず、`array_column`で`$array1`を`[id => name]`形式の連想配列に変換します。 そして、`array_flip($array2)`で、`$array2`の値がキーになった連想配列を作ります(値は使いません)。 `array_intersect_key`は、「引数に与えた連想配列がすべて持つキーに対して、[キー => 第1引数の配列の値]という連想配列を返す」関数ですので、絞り込みはこれでできます。 あとは、キーが普通の配列ではないので、`array_values`で普通の配列にできます(カンマ区切り文字列にしたければ、そのまま`implode`しても大丈夫です)。