3

私はこれに対する答えをどこにも見つけることができません。

foreach ($multiarr as $array) {
   foreach ($array as $key=>$val) {
      $newarray[$key] = $val;
   }
}

名前が重複していると言う$keyので、押し込もうとする$newarrayと実際には次のようになります。

$newarray['Fruit'] = 'Apples';
$newarray['Fruit'] = 'Bananas';
$newarray['Fruit'] = 'Oranges';

問題は、上記の例では、古い値をプッシュするのではなく、単に置き換えることです。

このような値をプッシュすることは可能ですか?

4

2 に答える 2

13

はい、角かっこの新しいペアに注意してください。

foreach ($multiarr as $array) {
   foreach ($array as $key=>$val) {
      $newarray[$key][] = $val;
   }
}

を使用して、少しオーバーヘッドを導入することもできますがarray_push()、ほとんどの場合、速記を使用します。

于 2012-09-07T22:28:32.147 に答える
-1

moonwave99の答えに代わるものを提供し、それがどのように微妙に異なるかを説明します。

次の手法は、連想配列のインデックス付き配列を解凍し、各サブ配列をarray_merge_recursive()、マージ「魔法」を実行する個別のパラメーターとして提供します。

コード:(デモ

$multiarr = [
    ['Fruit' => 'Apples'],
    ['Fruit' => 'Bananas'],
    ['Fruit' => 'Oranges'],
    ['Veg'   => 'Carrot'],
    //['Veg'   => 'Leek'],
];

var_export(
    array_merge_recursive(...$multiarr)
);

再帰的にマージするとき、それぞれのキーに値が1つしかない場合はサブ配列は使用されず、キーに複数の値がある場合はサブ配列が使用されます。

Leek要素のコメントを解除して、このアクションを確認してください。


ps 1列のデータのみを対象としていることがわかっていて、対象としているキーがわかっている場合はarray_column()、賢明な選択です。

コード:(デモ

var_export(
    ['Fruit' => array_column($multiarr, 'Fruit')]
);
于 2020-02-14T07:45:20.383 に答える