2017-02-27 47 views
-1

我有一個數組如下(的var_dump下圖):返回數組值通過密鑰

array (size=3) 
    'Test Field 1' => 
    array (size=1) 
     0 => string 'foo' (length=3) 
    'Test Field 2' => 
    array (size=3) 
     0 => string 'bar' (length=3) 
     1 => string 'foobar' (length=6) 
     2 => string 'barfoobar' (length=9) 
    'Test Field 3' => 
    array (size=2) 
     0 => string 'barfoo' (length=6) 
     1 => string 'foobarfoobar' (length=12) 

我想輸出的數據,如下所示通過密鑰分組:

  • 試驗字段1: FOO
  • 試驗字段2:巴
  • 試驗字段3:barfoo
  • 試驗字段2:foobar的
  • 試驗字段3:foobarfoobar
  • 試驗字段2:barfoobar

基本上,所有的0鍵組合在一起的,則1個鍵,則2個鍵等

陣列贏得不要總是這樣設置,這意味着每個數組可能有更多的元素,或者可能只有一個,所以它需要能夠動態填充。

一個典型的foreach循環給我的數據輸出如下(不是我想要的):

  • 測試場1:富
  • 測試場2:巴
  • 測試場2:foobar的
  • 測試字段2:barfoobar
  • 試驗字段3:barfoo
  • 試驗字段3:foobarfoobar
+1

獲取最大元素的尺寸。然後從0循環到該大小,並在該循環內通過頂級元素,如果它存在,則打印它的第N個元素。 – Barmar

+0

謝謝!我認爲用它的話來說,並不是我自己幫助我解決了這個問題。 – ScottD

+0

也分享您的代碼? – C2486

回答

0

上面的var_dump來自變量$output。顯示爲上述的數據,我做了以下:

$max = max(array_map('count', $output)); // get the max number of keys in the array 
$repeat = 0; //set to start with 0 key 
for($repeat; $repeat<=$max; $repeat++){ 
    foreach($output as $key => $values){ //loop through the $output 
     if (isset($values[$repeat])){ // check if this exists 
      echo $key . ': ' . $values[$repeat] . '<br />'; //display the key/values as needed 
     } 
    } 
} 
0

這個被測試代碼

$input = [ 
    'Test Field 1' => [ 
     'foo', 
    ], 
    'Test Field 2' => [ 
     'bar', 
     'foobar', 
     'barfoobar', 
    ], 
    'Test Field 3' => [ 
     'barfoo', 
     'foobarfoobar', 
    ], 
]; 

function recursive_print($input) 
{ 
    foreach ($input as $k => &$v) { 
     echo "\n"; 
     echo $k. ':' . array_shift($v); 

     if (!$v) { 
      unset($input[$k]); 
     } 
    } 


    if ($input) { 
     recursive_print($input); 
    } 
} 

recursive_print($input);