PHP数组:如何向现有数组添加“键和值”

7
我不知道如何向现有数组中添加键和值。我的数组是这样的。最初,我尝试使用 array_push() 添加,但它并不符合我的要求。
在我使用 'var_dump' 后,我给出了输出。
array (size=5)
  0 => 
    array (size=3)
     'id' => int 7
      'title' => string 'Pongal' (length=6)
      'start' => string '2016-05-16' (length=10)
  1 => 
    array (size=3)
       'id' => int 8
      'title' => string 'big day' (length=7)
      'start' => string '2016-05-04' (length=10)
  2 => 
    array (size=3)
      'id' => int 9
      'title' => string 'marriage day' (length=12)
      'start' => string '2016-05-19' (length=10)
  3 => 
    array (size=3)
      'id' => int 10
      'title' => string 'Karthiks  bday' (length=14)
      'start' => string '2016-06-11' (length=10)
  4 => 
    array (size=3)
      'id' => int 12
     'title' => string 'Election date announced' (length=23)
      'start' => string '2016-06-01' (length=10)

现在,我想在每个数组的所有元素之后插入array('sample_key' => 'sample_value')。
我该怎么做?我希望结果像这样:
array (size=5)
  0 => 
    array (size=4)
      'id' => int 7
      'title' => string 'Pongal' (length=6)
      'start' => string '2016-05-16' (length=10)
      ‘color’ => ‘red’
  1 => 
    array (size=4)
      'id' => int 8
      'title' => string 'big day' (length=7)
      'start' => string '2016-05-04' (length=10)
      ‘color’ => ‘red’
  2 => 
    array (size=4)
      'id' => int 9
      'title' => string 'marriage day' (length=12)
      'start' => string '2016-05-19' (length=10)
      ‘color’ => ‘red’
  3 => 
    array (size=4)
      'id' => int 10
      'title' => string 'Karthiks  bday' (length=14)
      'start' => string '2016-06-11' (length=10)
      ‘color’ => ‘red’
  4 => 
    array (size=4)
      'id' => int 12
      'title' => string 'Election date announced' (length=23)
      'start' => string '2016-06-01' (length=10)
      ‘color’ => ‘red’

请注意,我已经将“color”=>“red”添加到所有索引中。


1
$existingArray = []; $existingArray['mynewkey'] = 'mynewvalue'; 现有数组 = []; 现有数组['mynewkey'] = 'mynewvalue'; - Jonnix
1
使用 foreach 循环,只需像这样写:$value[$key] = $new_val - Murad Hasan
@Frayne,请问您能否举个例子来说明如何使用“foreach”吗? - Deepak Keynes
是的,检查我的答案。 - Murad Hasan
1
如果“键和值”是动态的,会怎样呢? - RomanPerekhrest
https://dev59.com/OXI95IYBdhLWcg3w2h56 - mickmackusa
2个回答

15

只需这样做:演示

使用&,您可以更改主数组,并只需使用$val['color']='red'在数组中添加一个新的键值对。

foreach($arr as $key => &$val){
    $val['color'] = 'red';
}

请注意,&符号的“写回”特性在循环结束后依然存在:将$val重置为新值将更改$val中的最后一个元素,这通常是意料之外的。有三种方法可以解决这类错误:

  • 避免使用写回,并仅在循环内部使用完整的数组表达式来写入值;
  • 不要在同一作用域内重复使用$val变量,即使是另一个foreach()循环也是如此;
  • 对$val变量使用unset(),将其与将要写回的数组断开连接。

请记住,在循环之后,再次设置$val将修改$arr中的最后一个元素 - 所以要小心! - halfer
@halfer,那有没有什么方法可以解决这个问题?我想使用unset($val); - Murad Hasan
当然,这会破坏写回链接。我在这里写过这个问题(https://blog.jondh.me.uk/2011/05/seriously-fiendish-php-gotcha/)。 - halfer
难道没有预定义的PHP函数可以做到这个吗?我希望有一个。 - Dimitar

4
foreach($arr as $key => $row){
  $arr[$key]['color']="red";
}

或者你可以使用@frayne-konok的示例,但是你不需要$key =>,只需写foreach ($arr as &$val) - newbie67
是的,同行帮了我,但你能解释一下'&$'的目的吗? - Deepak Keynes
1
我可以尝试翻译,但是抱歉我的英语不好。 当您使用foreach($array as $key=>$value)时,每次都会有一个新的变量$value,它等于$array[$key]。但是当您使用&$时,$value 不等于 $array[$key],它们是相同的 - newbie67

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接