2015-11-26 70 views
0

我有一個多維數組,它是從函數自動生成的。它看起來像這樣:PHP循環多維數組並提取信息

Array(
[0] => Array 
    (
     [0] => stdClass Object 
      (
       [team] => Borussia Dortmund (gazeder) 
      ) 

     [1] => stdClass Object 
      (
       [team] => Real Madrid (Deycekslo) 
      ) 

    ) 

[1] => Array 
    (
     [0] => stdClass Object 
      (
       [team] => Bayern Munchen (DaviiX) 
      ) 

     [1] => stdClass Object 
      (
       [team] => AS Roma (jakobmmm) 
      ) 

    ) 

[2] => Array 
    (
     [0] => stdClass Object 
      (
       [team] => Chelsea (davorm9) 
      ) 

     [1] => stdClass Object 
      (
       [team] => Napoli (pubilegenda) 
      ) 

    ) 

    ETC... 

所以我必須從中提取「團隊」值並將其存儲到數據庫中。數據庫部分不是問題,問題正在解壓。 我試過幾件事情,因爲這一個,但它不工作:

$length = count($game->tour); 
     for ($row = 0; $row < $length; $row++) { 
      for ($col = 0; $col <= 2; $col++) { 
      echo "<p>".$game->tour[$row][$col]."</p>"; 
     } 
    } 

的作品的唯一的事情就是:

foreach($game->tour[0][0] as $array) { 
     echo $array; 
     foreach($game->tour[0][1] as $array2) { 
      echo $array2; 
     } 
    } 

    foreach($game->tour[1][0] as $array) { 
     echo $array; 
     foreach($game->tour[1][1] as $array2) { 
      echo $array2; 
     } 
     echo '<br />'; 
    } 

那一個正常工作,但它是垃圾,因爲我需要能夠循環訪問該數組並打印所有「團隊」值。有什麼建議麼?

謝謝!

+0

因此,您需要提取團隊值以將其保存到數據庫中?不提取打印對不對? – artsylar

+0

我相信在生成該數組的函數,正在解碼一些JSON?您應該將true作爲第二個參數添加到json_decode,以便它成爲一個數組而不是stdClass對象。 – Daniel

+0

所以我必須寫json_decode($ game-> tour),然後去循環? – janip

回答

0

未經檢驗的,但我想這應該工作

function ext($obj,$name){ 
    $ret=array(); 
    $rem=array(); 
    $f=function() use(&$rem,&$ret,$name){ 
     $v=reset($rem); 
     assert(NULL!==($key1=key($rem))); 
     unset($rem[$key1]); 
     foreach($v as $key2=>$value){ 
      if($key2==$name){$ret[]=$value;} 
      if(is_array($value) || is_object($value)) 
      { 
       $rem[]=$value; 
      } 
     } 
    }; 
    $rem[]=$obj; 
    while(!empty($rem)) 
    { 
     $f(); 
    }  
    return $ret; 
} 

$teams=ext($arr,'team'); 

編輯:固定在一個變量錯字.. EDIT2:警告,這可能進入一個無限循環,如果您有任何循環引用...不知道,你應該測試你是否擔心這一點。編輯3:修復了另一個變量名稱錯字x.x(這會破壞代碼)

+0

嗯它不起作用。 – janip

+0

只是爲了澄清:用$ arr我調用數組? – janip

+0

函數*是。你用你的數組作爲第一個參數調用ext()函數,並在第二個參數(團隊) – hanshenrik