7

特定の値を持つ既存の配列に key=>value を追加しようとしています。

私は基本的に連想配列をループしており、特定の ID を持つ配列ごとに key=>value を追加したいと考えています。

元:

[0] => Array
    (
        [id] => 1
        [blah] => value2

    )

[1] => Array
    (
        [id] => 1
        [blah] => value2
    )

その間にやりたい

foreach ($array as $arr) {

     while $arr['id']==$some_id {

            $array['new_key'] .=$some value
            then do a array_push
      }    
}

したがって、$some_value は特定の ID に関連付けられます。

4

3 に答える 3

12

キーは連想配列で一意であるため、whileループは意味がありません。また、ループ中に配列を変更してもよろしいですか?問題が発生する可能性があります。これを試して:

$tmp = new array();
foreach ($array as $arr) {

     if($array['id']==$some_id) {
            $tmp['new_key'] = $some_value;
      }    
}


array_merge($array,$tmp);

より効率的な方法は次のとおりです。

if(in_array($some_id,$array){
  $array['new_key'] = $some_value;
}

または、値ではなく、一致させたい配列内のキーの場合...

if(array_key_exists($some_id,$array){
      $array['new_key'] = $some_value;
    }
于 2012-07-12T22:46:14.730 に答える
4

使用する場合:

foreach($array as $arr){
    ...
}

... $arr 変数は、その foreach にのみ適用されるローカル コピーです。追加しても $array 変数には影響しません。ただし、参照によって $arr を呼び出す場合:

foreach($array as &$arr){ // notice the &
    ...
}

... その配列に新しいキーを追加すると、ループしている $array に影響します。

あなたの質問を正しく理解できたことを願っています。

于 2013-06-24T20:59:52.600 に答える
0

私があなたを正しく理解していれば、これが解決策になります:

foreach ($array as $arr) {
  if ($arr['id'] == $some_id) {
     $arr[] = $some value;
     // or: $arr['key'] but when 'key' already exists it will be overwritten
  }
}
于 2012-07-12T22:46:01.530 に答える