Ich versuche, ein Array in einer foreach
-Schleife im laufenden Betrieb zu bearbeiten. Im Grunde analysiere ich jeden Schlüssel, und wenn dieser Schlüssel mit dem übereinstimmt, den ich möchte, möchte ich einen weiteren Eintrag im Array unmittelbar nach diesem hinzufügen.
Wenn ich diesen Code nehme,
$values = array(
'foo' => 10,
'bar' => 20,
'baz' => 30
);
foreach($values as $key => $value){
print $value . ' ';
if($key == 'bar'){
$values['qux'] = 21;
}
}
Ich habe 2 Probleme,
10 20 30
anstelle des erwarteten 10 20 30 21
. Wie kann ich den qux
-Eintrag zwischen bar
und baz
hinzufügen?
Danke für deine Ideen.
Foreach durchläuft keine neuen Werte, die dem Array hinzugefügt wurden, während er sich innerhalb der Schleife befindet.
Wenn Sie den neuen Wert zwischen zwei vorhandenen Werten hinzufügen möchten, können Sie ein zweites Array verwenden:
$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);
Siehe auch eine meiner Lieblingsfragen in StackOverflow zur Foreach-Schleife: Wie funktioniert PHP 'foreach' eigentlich?
Sie können das kaufmännische Und-Zeichen vor dem Wert verwenden.
//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;
}
Dafür müssen Sie ein neues Array erstellen,
<?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);
Die Lösung unten verwendet das gleiche Array.
$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);