2009-05-09 73 views
28

Tôi có một mảng:PHP foreach lặp qua mảng đa chiều

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

Mà tôi muốn sử dụng một vòng lặp foreach để thay thế (mà chỉ cho phép tôi để thiết lập số:

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

với khả năng hiển thị lớp học .first.last cho các giá trị mảng có liên quan

Chỉnh sửa

Tôi muốn dữ liệu được lặp lại như:

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

Rất cám ơn cho phản ứng nhanh chóng của bạn. StackOverflow đá!

Trả lời

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

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

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

Rất cám ơn! Tôi đã sử dụng: (($ isLast)? 'Class = "last-child"': '') để thêm lớp vào danh sách –

+1

Giải pháp rất đơn giản và thiết thực. Cảm ơn. – janosrusiczki

+1

đây là người đàn ông tuyệt vời hoạt động hoàn hảo. cảm ơn rất nhiều vì đã chia sẻ – Jake

2

Nếu bạn có nghĩa là mục đầu tiên và cuối cùng của mảng khi nói về a.first và a.last, nó đi như thế này:

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

mảng trong PHP có một con trỏ nội bộ mà bạn có thể thao tác với reset, next, end. Lấy chìa khóa/giá trị làm việc với keycurrent, nhưng sử dụng each có thể được tốt hơn trong nhiều trường hợp ..

+0

Xin lỗi vì đã một chút không rõ ràng. Tôi muốn các giá trị được hiển thị là:

  • ' . $arr_nav[$row]["name"] . '
  • '. "\ r \ n"; với một kiểm tra mỗi vòng lặp - để thêm một lớp học vào 'li' –

    +0

    , đây phải là câu trả lời được chấp nhận. rất nhiều sáng tạo. !! – 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'; 
    } 
    

    Bây giờ bạn chỉ có thể vang lớp bên trong bạn html-máy phát điện. Có lẽ sẽ cần một số loại kiểm tra để đảm bảo rằng lớp được thiết lập, hoặc cung cấp một lớp rỗng mặc định cho mảng.

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

    OUTPUT:

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

    Reference Source Code

    +0

    chỉ 1 cấp độ .. chúng tôi cần thêm nhiều chiều – aswzen

    +0

    @aswzen bạn có thể sử dụng đệ quy như thế này http://stackoverflow.com/questions/14006609/php-recursion-print-all-elements-of- a-đa chiều-mảng-với-các phím # answer-14006639 –

    Các vấn đề liên quan