将值添加到foreach循环内的数组中

zes*_*ssx 8 php arrays foreach

我正在尝试在foreach循环内动态编辑数组.我基本上分析每个键,如果这个键匹配我想要的键,我想在这个键之后立即在数组中添加另一个键.

如果我拿这个代码,

$values = array(
    'foo' => 10,
    'bar' => 20,
    'baz' => 30
);

foreach($values as $key => $value){
    print $value . ' ';
    if($key == 'bar'){
        $values['qux'] = 21;
    }
}
Run Code Online (Sandbox Code Playgroud)

我有两个问题,

  • 首先,输出10 20 30而不是预期10 20 30 21
  • 第二,即使我解决了第一个问题,我的值仍将我的数组末尾添加

我怎么能quxbar和之间添加条目baz

谢谢你的想法.

Lar*_*ert 13

在循环内部,Foreach不会循环添加到数组中的新值.

如果要在两个现有值之间添加新值,可以使用第二个数组:

$values = array(
    'foo' => 10,
    'bar' => 20,
    'baz' => 30
);
$newValues = array();
foreach($values as $key => $value) 
{
    $newValues[$key] = $value;
    if($key == 'bar') 
    {
        $newValues['qux'] = 21;
    }
}
print implode(' ', $newValue);
Run Code Online (Sandbox Code Playgroud)

另外,请参阅StackOverflow讨论foreach循环的一个我最喜欢的问题:PHP"foreach"实际上如何工作?


Rad*_*eed 5

您可以在值之前使用 & 符号。

//populate all the promos into their promoG groups
foreach($unclaimedPromoGroups as &$unclaimedPromoGroup) {
    $_promo = new Promo();
    $_promo->promoGroupID = $unclaimedPromoGroup['promo_groupID'];
    $promo = $_promo->getGroupPromos();
    $unclaimedPromoGroup["promos"] = $promo;
}
Run Code Online (Sandbox Code Playgroud)