我正在尝试将key=>值添加到具有特定值的现有数组中。
我基本上是在一个关联数组中循环,我想为每个具有特定id的数组添加一个键值:
例如:
[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相关联。
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;
}
使用时:
foreach($array as $arr){
...
}
$arr变量是一个本地副本,其作用域仅限于该foreach。添加到其中的任何内容都不会影响$array变量。但是,如果您通过引用调用$arr:
foreach($array as &$arr){ // notice the &
...
}
现在,如果您向该数组添加一个新键,它将影响您循环使用的$array。
我希望我能正确理解你的问题。
如果我理解正确,这将是解决方案:
foreach ($array as $arr) {
if ($arr['id'] == $some_id) {
$arr[] = $some value;
// or: $arr['key'] but when 'key' already exists it will be overwritten
}
}