En PHP comment puis-je mettre à jour les valeurs dans un asssociative tableau et de stocker l'ensemble de la matrice?
Voici un exemple de code:
$array = array();
$array['master']['slave'] = "foo";
foreach ($array as $key => $value) {
foreach ($value as $key2 => $value2) {
if (preg_match('/slave/',$key2)) {
$value[$key2] = "bar";
print "$value[$key2] => $key2 => $value2\n";
}
}
}
print_r($array);
De sortie:
bar => slave => foo
Array
(
[master] => Array
(
[slave] => foo
)
)
Plutôt je voudrais avoir les informations suivantes dans le tableau final:
Array
(
[master] => Array
(
[slave] => bar
)
)
Quel mal fais-je ici?
Merci!
Note:
Exemple2:
$a= array('l1'=>array('l2'=>array('l3'=>array('l4'=>array('l5'=>'foo')))));
$a['l1']['l2']['l3']['l4']['l5'] = 'bar';
foreach ($a as $i => &$values) {
foreach ( $values as $key => &$value) {
if (is_array($value)){
print_array($value,$key);
}
}
}
function print_array ($Array, $parent) {
foreach ($Array as $i1 => &$values1) {
if (is_array($values1)){
foreach ($values1 as $key1 => &$value1) {
if (is_array($value1)) {
print_array($value1,$values1);
}
else {
print " $key1 => $value1\n";
}
}
}
else {
if (preg_match('/l5/',$i1)) {
$values1 = "foobar";
print " $i1 => $values1\n";
}
}
}
}
print_r($a);
De sortie ne reflète pas 'foobar' l5
Vous devez vous connecter pour publier un commentaire.
Parce que
foreach
fonctionne sur une copie du tableau. Lisez la documentation surforeach
:De sorte que vous devriez faire
Mise à jour:
Ok, j'ai examiné votre code:
l5
.Solution:
Faire usage de la récursivité. Ce code fonctionne:
Espère que ça aide.
Oh et s'il vous plaît utiliser les autres touches pour la prochaine fois. Je pensais tout le temps que la clé a été
15
(quinze) et je me demandais pourquoi mon exemple n'était pas de travailler 😉 (15
semble pas si différent del5
en un coup d'œil).&
doit venir avant le tableau, mais c'est seulement avant la valeur. Pour vous deuxième exemple: Vous avez encore oublié de référence$values1
et$value1
dans votreprint_array
fonction dans leforeach
clause. Et je pense que vous avez de référence$value
trop.Vous avez un peu de choix, mais toutes les souches de la même problématique, dont l'origine est sur cette ligne
À ce point dans le code,
$value
n'est pas une référence à la 2e dimension des tableaux dans votre structure de données. Pour résoudre ce problème, vous avez deux options.1) de la Force de référence
2) l'Utilisation d'un "complet" expression pour définir la valeur souhaitée
Parce que $valeur est une nouvelle variable
Pourquoi ne pas simplement: