2014-01-07 28 views
0

我在PHP一個這樣的數組:PHP:如何輸出動態多維數組值?

$array = array(
    'main0' => array(
     'level0' => array('0'=>'value_1'), 
     'level1' => array(
       '0' => 'value_2', 
       '1' => 'value_3', 
       ), 
     'level2' => array('0'=>'value_445') 
     ), 
    'main1' => array(
     'level0' => array('0'=>'value_1'), 
     'level1' => array('0'=>'value_12'), 
     'level2' => array(
       '0' => 'value_2', 
       '1' => 'value_3', 
       ), 
     'level3' => array('0'=>'value_5') 
     ), 
); 

此陣列將是動態的,許多mainkeys和級別,每個級別也有值的動態量。

我的問題是,我試圖回顯select option html標記中的每個數組級別。我試過foreach ($array[][] as $value)但沒有運氣。如何在PHP中實現這一點?

編輯

解決使用3 foreach我的問題,可能是不乾淨的解決方案,但它的工作原理。我在blade php解決方案:

<?php $data = Product::GetCategories(); ?> 
     @if ($data != null) 
      @foreach ($data as $item) 
       <optgroup label="{{ $item[0][0] }}"> 
        @foreach ($item as $level) 
         @foreach ($level as $v) 
          <option value="{{ $v }}">{{ $v }}</option> 
         @endforeach 
        @endforeach 
       </optgroup> 
      @endforeach 
     @endif 
+0

回顯代碼在哪裏?爲什麼沒有運氣?什麼是輸出? –

+0

回顯代碼就像這個'foreach($ array爲$ k => $ v)echo「」;'。錯誤輸出是'錯誤數組到字符串轉換' – user2002495

+0

@ user2002495你能按照你喜歡的方式顯示'select option'html例子嗎?根據你的數組,選擇選項將有重複的值。每個「主」是不同的「選擇」框? – RaviRokkam

回答

2

如果您不太在意操縱陣列項目,並且只需要在屏幕上查看結果,則可以使用:print_r($array);

如果您確實需要對數組項進行操作,那麼這裏是一個遞歸函數(myRecursiveFunction)和一個在非數組(myNormalFunction)上執行的普通函數來說明這個過程。

function myRecursiveFunction($array) { 
    foreach($array as $key=>$value) { 
     if(is_array($value)) { 
      myRecursiveFunction($value); 
     } 
     myNormalFunction($value); 
    } 
} 
0

對於初學者使用類似的DomDocument操縱HTML在PHP。

除此之外嘗試:

foreach ($array as $key => $value) { 
    print $key . " " . $value; 
} 

爲了進一步嵌套記住is_array,所以現在你的代碼變得

foreach ($array as $key => $value) { 
    print $key . " " . $value; 
    if(is_array($value)) { 
     //do something with this array 
    } 
} 

你可以做一些與遞歸在這裏,但它的更好使用的東西像DomDocument,它維護一個遞歸樹,讓你遍歷更少的代碼。

0

您可以在這裏使用遞歸。

試試這個。

function traverse($array){ 
    foreach($array as $item){ 
     if(is_array($item)){ 
      traverse($item); 
     }else echo $item . "<br/>"; 
    } 
} 

traverse($array); 
0

如果您不需要動態去任何更深它會像:

foreach($array as $mains) { 
    foreach($mains as $level){ 
     var_dump($level); 
    } 
} 

如果你想更深入的時候$level有任何孩子去這樣的:

function explore($array) { 
    foreach ($array as $child) { 
     if (gettype($child) === 'array')) { 
      explore($child); 
     } else { 
      echo $child; 
     } 
    } 
} 

// init 
explore($array);