2016-07-27 2 views
0

J'ai un tableau multidimensionnel avec lequel j'essaie de travailler, voici à quoi il ressemble.Tableau multidimensionnel ne renvoyant pas les bonnes valeurs

$states = array(
"California" => array(
    "state" => "California", 
    "abbr" => "CA", 
    "city" => "Sacramento", 
    "county" => "Sacramento", 
    "zip" => "95632" 
), 
"Washington" => array(
    "state" => "Washington", 
    "abbr" => "WA", 
    "city" => "Seattle", 
    "county" => "King", 
    "zip" => "98101" 
), 
"Texas" => array(
    "state" => "Texas", 
    "abbr" => "TX", 
    "city" => "San Antonio", 
    "county" => "Bexar", 
    "zip" => "78251" 
), 
"Florida" => array(
    "state" => "Florida", 
    "abbr" => "FL", 
    "city" => "Orlando", 
    "county" => "Orange", 
    "zip" => "32801" 
), 
); 

Quand je lance une boucle foreach pour obtenir les clés du premier niveau des tableaux que j'obtenir la sortie attendue de

California Washington Texas Florida 

Cependant, je dois accéder au deuxième niveau du tableau. Par exemple, je dois la Californie [ 'abr'] si c'est le code que je lance:

foreach (array_keys($states) as $state) { 
    echo $state['abbr']; 
} 

Au lieu d'obtenir

CA WA TX FL 

comme je pense que je suis en train de

C W T F 

Des idées sur ce que je fais mal?

Répondre

1

array_keys($states) est de retour

array("California", "Washington", "Texas", "Florida") 

La boucle foreach fait donc écho au premier caractère de chaque état. Boucle à travers l'ensemble du réseau au lieu de simplement les clés:

foreach ($states as $name => $details) { 
    echo $details['abbr']; 
} 
1

Vous pouvez utiliser deux foreach pour accéder aux éléments dans chaque ville (tableau). Ce n'est pas le moyen le plus rapide mais c'est bon de le savoir.

// access the first layer 
foreach($states as $state) 
{ 
    // access the second layer 
    foreach($state as $key => $element) 
    { 
    // if the key is equal to 'abbr', echo it's value 
    echo ($key == 'abbr') ? $state[$key] : ''; 
    echo ' '; 
    } 
} 

Affichera:

CA WA TX FL

0

Just:

foreach($states as $state) { 
    foreach($state as $v) { 
     echo $v['abbr']; 
    } 
} 
+0

Bien que cet extrait de code peut résoudre la question, [y compris une explication] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) aide vraiment à améliorer la qualité de votre message Rappelez-vous que vous répondez à la question pour les lecteurs dans le futur, et que ces personnes pourraient ne pas connaître les raisons de votre suggestion de code. Essayez également de ne pas surcharger votre code avec des commentaires explicatifs, car cela réduit la lisibilité du code et des explications! – FrankerZ

1
foreach(array_keys($states) as $state) { 
    echo $state; 
} 

fera écho aux clés, parce que vous bouclez les clés, pas le tableau. Pour obtenir l'abréviation, vous devez faire

foreach($states as $state) { 
    echo $state['abbr']; 
} 

Si vous voulez faire une boucle sur la clé et la valeur en même temps, essayez cette

foreach($states as $key=>$state) { 
    echo "$key: {$state['abbr']}"; 
} 
0

seulement découper array_keys. Vous avez besoin d'un élément entier de ce tableau, pas seulement des clés de tableau.

foreach ($states as $state) 
{ 
    echo $state['abbr']; 
}