2012-03-12 62 views
-1

任何人都知道如何做到這一點?多維數組循環與一些值未設置 - PHP

我想通過一個數組,其中不是每個對象都有一個值。我想得到的是一個數組,其中的鍵保存了指定stdClass對象的數字,並將「value」作爲值。如果沒有指定「值」,則應打印「0」。

所以最後陣列應該是這個樣子:

Array ( 
[123456789_123456789] => 192 
[54321_98765] => 0 
[987654321_123456789] => 1292 
[987854321_123456734] => 0 
) 

原來這裏是輸出:

stdClass Object ( 
[123456789_123456789] => stdClass Object ( 
    [data] => Array ( 
     [0] => stdClass Object ( 
     [id] => 123456789_123456789/insights/name_of_metric/period 
     [name] => name_of_metric 
     [period] => lifetime 
     [values] => 
      Array ( 
       [0] => stdClass Object ( 
       [value] => 1292) 
       ) 
     [title] => Lifetime Post Organic Reach 
     [description] => A Description ... 
     [paging] => stdClass Object ( 
     [previous] => https://graph.facebook.com/ALINK 
     [next] => https://graph.facebook.com/ALINK 
)) 

[54321_98765] => stdClass Object ( 
    [data] => Array ( 

     [paging] => stdClass Object ( 
     [previous] => https://graph.facebook.com/ALINK 
     [next] => https://graph.facebook.com/ALINK 
)) 

[987654321_123456789] => stdClass Object ( 
    [data] => Array ( 
     [0] => stdClass Object ( 
     [id] => 987654321_123456789/insights/name_of_metric/period 
     [name] => name_of_metric 
     [period] => lifetime 
     [values] => 
      Array ( 
       [0] => stdClass Object ( 
       [value] => 1292) 
       ) 
     [title] => Lifetime Post Organic Reach 
     [description] => A Description ... 
     [paging] => stdClass Object ( 
     [previous] => https://graph.facebook.com/ALINK 
     [next] => https://graph.facebook.com/ALINK 
)) 

[987854321_123456734] => stdClass Object ( 
    [data] => Array ( 

     [paging] => stdClass Object ( 
     [previous] => https://graph.facebook.com/ALINK 
     [next] => https://graph.facebook.com/ALINK 
)) 
) 

這是我試過到目前爲止:

$aVar = array(); 
    foreach ($var as $var_1){ 
     foreach ($var_1->data as $var_2){ 
      foreach ($var_2->values as $var_3){ 
    $aVar[] = $var_3->value; 
     } 
    } 
} 

我相信我必須使用foreach (var_1->data as $var_2 => $var2_1)

+2

你到目前爲止嘗試過什麼?你在這樣做的過程中遇到了具體問題?什麼阻礙你只是檢查這個值,例如? – hakre 2012-03-12 21:42:44

+0

你需要循環的邏輯嗎?要省略空對象,只需使用is_null或is_set,如果值爲null,則將值設置爲0,否則複製該值。 – evanmcdonnal 2012-03-12 21:44:36

+0

到目前爲止,你的循環是什麼樣的? – jeroen 2012-03-12 21:44:39

回答

1

isset()函數「語言結構」和is_array()功能是你在這種情況下的朋友,除非你有沒有指定另外一個問題,你的問題不是很清楚;)

你需要什麼做的是中更改for-each循環外,以類似於以下的東西,有額外的驗證:

$aVar = array(); 
foreach ($var as $object_key=>$var_1) 
{ 
    if(isset($var_1->data) && is_array($var_1->data)) 
    { 
     foreach ($var_1->data as $var_2) 
     { 
      if(isset($var_2->values) && is_array($var_2->values)) 
      { 
       foreach ($var_2->values as $var_3) 
       { 
        $aVar[$object_key] = $var_3->value; 
       } 
      } 
     } 
    } 
} 

此代碼是未經測試,我不相信我所做的任何語法錯誤。

+0

只是挑剔:'isset'不是一個函數,而是一種語言結構。 ) – hakre 2012-03-12 21:48:28

+0

php.net乞求不同:http://uk3.php.net/manual/en/function.isset.php – Jay 2012-03-12 21:50:16

+0

它不求,請參見[注](http://uk3.php.net /manual/en/function.isset.php#refsect1-function.isset-notes);) - 正如剛纔說的那樣。 – hakre 2012-03-12 21:51:37