J'essaie d'éditer un tableau à la volée, dans une boucle foreach
. J'analyse en gros chaque clé et si cette clé correspond à celle que je veux, je veux ajouter une autre entrée dans le tableau immédiatement après celui-ci .
Si je prends ce code,
$values = array(
'foo' => 10,
'bar' => 20,
'baz' => 30
);
foreach($values as $key => $value){
print $value . ' ';
if($key == 'bar'){
$values['qux'] = 21;
}
}
J'ai 2 problèmes,
10 20 30
au lieu du 10 20 30 21
attendu Comment pourrais-je ajouter l'entrée qux
entre les noms bar
et baz
?
Merci pour vos idées.
Foreach ne parcourra pas les nouvelles valeurs ajoutées au tableau tant qu'il est à l'intérieur de la boucle.
Si vous souhaitez ajouter la nouvelle valeur entre deux valeurs existantes, vous pouvez utiliser un deuxième tableau:
$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);
Aussi, voyez une de mes questions préférées sur StackOverflow traitant de la boucle foreach: Comment fonctionne PHP 'foreach'?
Vous pouvez utiliser le signe esperluette avant la valeur.
//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;
}
Pour cela, vous devez créer un nouveau tableau,
<?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);
La solution ci-dessous utilise le même tableau.
$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);