2012-01-17 11 views
1

私の多次元配列内のすべての配列に要素を追加したいと思います。私の配列は、このようなものですPHPのmutidimentional配列内のすべての配列に要素を追加する最も良い方法

:私は両方の配列に[RatingID] => 2を追加したい

Array 
(
    [0] => Array 
     (
      [RatingFactorPreferenceID] => 10 
      [PreferenceID] => 45 
      [RatedValue] => 1 
      [CreatedOn] => 1326779061 
      [CreatedBy] => 25 
     ) 

    [1] => Array 
     (
      [RatingFactorPreferenceID] => 20 
      [PreferenceID] => 45 
      [RatedValue] => 2 
      [CreatedOn] => 1326779061 
      [CreatedBy] => 25 
     ) 

) 

、その後、私の最後の列は次のようになります。

Array 
(
    [0] => Array 
     (
      [RatingID] => 2 
      [RatingFactorPreferenceID] => 10 
      [PreferenceID] => 45 
      [RatedValue] => 1 
      [CreatedOn] => 1326779061 
      [CreatedBy] => 25 
     ) 

    [1] => Array 
     (
      [RatingID] => 2 
      [RatingFactorPreferenceID] => 20 
      [PreferenceID] => 45 
      [RatedValue] => 2 
      [CreatedOn] => 1326779061 
      [CreatedBy] => 25 
     ) 

) 

私のことができ、私の配列をループし、これを行いますこれを行うには良い方法がありますか?

+1

これらのデータはSQL文からのものですか?場合によってはPHPの代わりにクエリレベルからそれを行うことができます –

+0

@andreasそれはPHPの配列です –

答えて

2
$array = array_map(function ($a) { return $a + array('RatingID' => 2); }, $array); 

これは、あなたがそれを好む場合でも、舞台裏ではありますが、舞台裏でループします。
また、array_walkを使用することもできますが、これは本当に別の構文で装飾されたループです。

+0

実際に2はハードコードされた値ではありません。私は$ var = 1を使用しようとしました。 array( 'RatingID' => $ var)をarry_map関数の中に入れます。それは、未定義の変数$ varと言います。なぜですか? –

+1

匿名関数以外の変数は関数内のスコープ内にないためです。スコープに含めるには 'function($ a)use($ var){...}'を使う必要があります。 http://www.php.net/manual/en/functions.anonymous.phpを参照してください。この構文に慣れていない場合は、おそらく単純なループが良い選択でしょう。 – deceze

1

@ decezeの答えは良いですが、2番目の配列をインスタンス化し、配列の結合演算子(+)を使用することは、不必要に複雑です。それをシンプルに保つ:

$new_array = array_map(
    function($inner_array) { 
    $inner_array[ 'RatingID' ] = 2; 

    return $inner_array; 
    }, 

    $orig_array 
); 
+1

「不必要に複雑」をどのように定義するかによって異なります。私は1つの表現を「不必要に複雑」にすることができる2つのステートメントで何かを見つけました。あなたがそれを遠くに行っているならば、7行の 'array_map'の代わりに3行の' foreach'を使ってください:o) – deceze

+0

これはphp5.3 +の正しいのですか? –

+0

@deceze読みやすさと計算の両面で「複雑」。私は次の人と同じくらい良い一ライナーが大好きですが、新しい配列を割り当てて、改行を保存するためにマージを実行するだけでは虚栄心です。 –

0

私はあるarray_walkこれはあなたのために働くべきで最良の選択肢

$array = array(
      array(
       'RatingFactorPreferenceID' => 10, 
       'PreferenceID' => 45, 
       'RatedValue' => 1, 
       'CreatedOn' => 1326779061, 
       'CreatedBy' => 25 
      ), 
      array(
       'RatingFactorPreferenceID' => 20, 
       'PreferenceID' => 45, 
       'RatedValue' => 2, 
       'CreatedOn' => 1326779061, 
       'CreatedBy' => 25, 
      ) 
     ); 

function AddAtTop(&$act_array,$key){ 

    $act_array = array_merge(array('RatingID'=>2), $act_array); 
} 

array_walk($array, 'AddAtTop'); 

echo '<pre>'; 
print_r($array); 
echo '</pre>'; 

だと思います。

関連する問題