将值添加到 foreach 循环内的数组
Add values to an array inside a foreach loop
我正在尝试在 foreach
循环中动态编辑一个数组。我基本上分析了每个键,如果这个键匹配我想要的那个,我想在这个.
之后立即在数组中添加另一个条目
如果我接受这个代码,
$values = array(
'foo' => 10,
'bar' => 20,
'baz' => 30
);
foreach($values as $key => $value){
print $value . ' ';
if($key == 'bar'){
$values['qux'] = 21;
}
}
我有 2 个问题,
- 首先,输出是
10 20 30
而不是预期的 10 20 30 21
- 其次,即使我解决了第一个问题,我的值仍然会添加在我数组的末尾
如何在 bar
和 baz
之间添加 qux
条目?
谢谢你的想法。
为此你需要创建一个新数组,
<?php
$values = array(
'foo' => 10,
'bar' => 20,
'baz' => 30
);
$newarray = array();
foreach($values as $k => $v)
{
$newarray[$k] = $v;
if($k == 'bar')
$newarray['qux'] = 21;
}
echo implode(' ', $newarray);
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);
此外,请参阅 Whosebug 上我最喜欢的一个问题,其中讨论了 foreach 循环:How does PHP 'foreach' actually work?
下面的解决方案使用相同的数组。
$values = array(
'foo' => 10,
'bar' => 20,
'baz' => 30
);
function match($niddle, $haystack, $push, $offset = 0) {
foreach(array_slice($haystack, $offset) as $key => $value)
{
print $value . ' ';
if($key == $niddle)
{
$i = array_search($niddle, array_keys($haystack)) + 1;
$haystack = array_slice($haystack, 0, $i, true) + $push + array_slice($haystack, $i, count($haystack) - $i, true);
$haystack = match($niddle, $haystack, $push, $i);
break;
}
}
return $haystack;
}
$values = match('bar', $values, array('qux'=>21));
var_dump($values);
您可以在值前使用 & 符号。
//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;
}
我正在尝试在 foreach
循环中动态编辑一个数组。我基本上分析了每个键,如果这个键匹配我想要的那个,我想在这个.
如果我接受这个代码,
$values = array(
'foo' => 10,
'bar' => 20,
'baz' => 30
);
foreach($values as $key => $value){
print $value . ' ';
if($key == 'bar'){
$values['qux'] = 21;
}
}
我有 2 个问题,
- 首先,输出是
10 20 30
而不是预期的10 20 30 21
- 其次,即使我解决了第一个问题,我的值仍然会添加在我数组的末尾
如何在 bar
和 baz
之间添加 qux
条目?
谢谢你的想法。
为此你需要创建一个新数组,
<?php
$values = array(
'foo' => 10,
'bar' => 20,
'baz' => 30
);
$newarray = array();
foreach($values as $k => $v)
{
$newarray[$k] = $v;
if($k == 'bar')
$newarray['qux'] = 21;
}
echo implode(' ', $newarray);
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);
此外,请参阅 Whosebug 上我最喜欢的一个问题,其中讨论了 foreach 循环:How does PHP 'foreach' actually work?
下面的解决方案使用相同的数组。
$values = array(
'foo' => 10,
'bar' => 20,
'baz' => 30
);
function match($niddle, $haystack, $push, $offset = 0) {
foreach(array_slice($haystack, $offset) as $key => $value)
{
print $value . ' ';
if($key == $niddle)
{
$i = array_search($niddle, array_keys($haystack)) + 1;
$haystack = array_slice($haystack, 0, $i, true) + $push + array_slice($haystack, $i, count($haystack) - $i, true);
$haystack = match($niddle, $haystack, $push, $i);
break;
}
}
return $haystack;
}
$values = match('bar', $values, array('qux'=>21));
var_dump($values);
您可以在值前使用 & 符号。
//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;
}