2009-05-09 16 views
28

J'ai un tableau:boucle PHP foreach par tableau multidimensionnel

$arr_nav = array(array("id" => "apple", 
      "url" => "apple.html", 
      "name" => "My Apple" 
     ), 
     array("id" => "orange", 
      "url" => "orange/oranges.html", 
      "name" => "View All Oranges", 
     ), 
     array("id" => "pear", 
      "url" => "pear.html", 
      "name" => "A Pear" 
     )  
); 

Ce que je voudrais utiliser une boucle foreach pour remplacer (ce qui ne me permet de définir le nombre:

for ($row = 0; $row < 5; $row++) 

avec la possibilité d'afficher une .first et .last classe pour le tableau des valeurs pertinentes

Modifier

Je voudrais que les données à résonnaient comme:

<li id="' . $arr_nav[$row]["id"] . '"><a href="' . $v_url_root . $arr_nav[$row]["url"] . '" title="' . $arr_nav[$row]["name"] . '">"' . $arr_nav[$row]["name"] . '</a></li>' . "\r\n"; 

Un grand merci pour vos réponses rapides. Roches StackOverflow!

Répondre

32
$last = count($arr_nav) - 1; 

foreach ($arr_nav as $i => $row) 
{ 
    $isFirst = ($i == 0); 
    $isLast = ($i == $last); 

    echo ... $row['name'] ... $row['url'] ...; 
} 
+0

Merci beaucoup! J'ai utilisé: (($ isLast)? 'Class = "last-child"': '') pour ajouter une classe à l'élément de liste –

+1

Solution très simple et pratique. Merci. – janosrusiczki

+1

ceci est grand homme fonctionne parfaitement. merci beaucoup pour le partage – Jake

2

Si vous voulez parler de la première et la dernière entrée du tableau quand on parle de a.first et a.last, il va comme ceci:

foreach ($arr_nav as $inner_array) { 
    echo reset($inner_array); //apple, orange, pear 
    echo end($inner_array); //My Apple, View All Oranges, A Pear 
} 

tableaux en PHP ont un pointeur interne que vous pouvez manipuler avec reset, next, end. clés/valeurs Récupération fonctionne avec key et current, mais en utilisant each pourrait être mieux dans de nombreux cas ..

+0

Toutes mes excuses pour être un peu clair. Je voudrais que les valeurs soient affichées comme:

  • ' . $arr_nav[$row]["name"] . '
  • '. "\ r \ n"; avec une vérification de chaque boucle - pour ajouter une classe au 'li' –

    +0

    cela devrait être la réponse acceptée. beaucoup de créativité. !! – Akintunde007

    0
    <?php 
    $first = reset($arr_nav); // Get the first element 
    $last = end($arr_nav); // Get the last element 
    // Ensure that we have a first element and that it's an array 
    if(is_array($first)) { 
        $first['class'] = 'first'; 
    } 
    // Ensure we have a last element and that it differs from the first 
    if(is_array($last) && $last !== $first) { 
        $last['class'] = 'last'; 
    } 
    

    Maintenant, vous pouvez simplement écho à la classe à l'intérieur vous html générateur. Aurait probablement besoin d'une sorte de vérification pour s'assurer que la classe est définie, ou fournir une classe vide par défaut au tableau.

    5
    <?php 
    $php_multi_array = array("lang"=>"PHP", "type"=>array("c_type"=>"MULTI", "p_type"=>"ARRAY")); 
    
    //Iterate through an array declared above 
    
    foreach($php_multi_array as $key => $value) 
    { 
        if (!is_array($value)) 
        { 
         echo $key ." => ". $value ."\r\n" ; 
        } 
        else 
        { 
         echo $key ." => array(\r\n"; 
    
         foreach ($value as $key2 => $value2) 
         { 
          echo "\t". $key2 ." => ". $value2 ."\r\n"; 
         } 
    
         echo ")"; 
        } 
    } 
    ?> 
    

    SORTIE:

    lang => PHP 
    type => array( 
        c_type => MULTI 
        p_type => ARRAY 
    ) 
    

    Reference Source Code

    +0

    seulement 1 niveau .. nous avons besoin de plusieurs dimensions – aswzen

    +0

    @aswzen vous pouvez utiliser récursion comme ceci http://stackoverflow.com/questions/14006609/php-recursion-print-all-elements-of- un tableau multidimensionnel avec des clés # answer-14006639 –

    Questions connexes