2009-05-09 15 views
28

Mam tablicę:PHP foreach pętli tablicy wielowymiarowej

$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" 
     )  
); 

które chciałbym użyć pętli foreach zastąpić (która pozwala tylko na mnie, aby ustawić liczbę:

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

z możliwość wyświetlania klasę .first i .last dla danej tablicy wartości

Edit

chciałbym dane mają być echem jak:

<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"; 

Wielkie dzięki za szybką odpowiedź. StackOverflow rocks!

Odpowiedz

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

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

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

Wielkie dzięki! Użyłem: (($ isLast)? 'Class = "last-child"': '') aby dodać klasę do listy-pozycji –

+1

Bardzo proste i praktyczne rozwiązanie. Dzięki. – janosrusiczki

+1

to jest wspaniały człowiek działa idealnie. dziękuję bardzo za udostępnianie – Jake

2

Jeśli masz na myśli pierwszy i ostatni wpis na tablicy, gdy mówimy o a.first i a.last, to idzie tak:

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

tablice w PHP mają wewnętrzny wskaźnik którym można manipulować reset, next, end. Odzyskiwanie kluczy/wartości współpracuje z key i current, ale przy użyciu each może być w wielu przypadkach lepiej ..

+0

Przepraszam za bycie trochę niejasne. Chciałbym, aby wartości były wyświetlane jako:

  • ' . $arr_nav[$row]["name"] . '
  • ". "\ r \ n"; z kontrolą każdej pętli - aby dodać klasę do "li" –

    +0

    , powinna to być zaakceptowana odpowiedź. dużo kreatywności. !! – 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'; 
    } 
    

    Teraz można po prostu echo klasę wewnątrz ciebie html-generator. Prawdopodobnie potrzebowałby jakiejś kontroli, aby upewnić się, że klasa jest ustawiona, lub podać domyślną pustą klasę do tablicy.

    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 ")"; 
        } 
    } 
    ?> 
    

    WYJŚCIE:

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

    Reference Source Code

    +0

    tylko 1 poziom .. potrzebujemy więcej wielowymiarowych – aswzen

    +0

    @ zuzen można użyć rekursji w ten sposób http://stackoverflow.com/questions/14006609/php-recursion-print-all-elements-of- a-wielowymiarowy-tablica-z-kluczami # answer-14006639 –