2012-03-12 73 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