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 回答