2017-05-03 169 views
-1

我从Facebook Graph API响应具有以下数组结构。访问变量阵列数据PHP

"data": [ 
    { 
     "actions": [ 
     { 
      "action_type": "comment", 
      "value": "2" 
     }, 
     { 
      "action_type": "offsite_conversion", 
      "value": "1606" 
     } 
     ], 
     "date_start": "2017-04-03", 
     "date_stop": "2017-05-02" 
    }, 
    { 
     "actions": [ 

     { 
      "action_type": "post", 
      "value": "2" 
     }, 
     { 
      "action_type": "post_reaction", 
      "value": "33" 
     }, 
     { 
      "action_type": "page_engagement", 
      "value": "816" 
     }, 
     { 
      "action_type": "post_engagement", 
      "value": "807" 
     }, 
     { 
      "action_type": "offsite_conversion", 
      "value": "1523" 
     } 
     ], 
     "date_start": "2017-04-03", 
     "date_stop": "2017-05-02" 
    }, 
] 

值的数量是灵活的,我想从“offsite_conversion”获取值。通常我会做到这一点,例如像:

data['data'][0]['actions']['1']['value'] 

但是,在这种情况下,这不起作用,因为[“1”]是可变的。

+1

什么是更换'“1”的问题'用一个变量? –

+0

你能否给我更多的细节。所以我已经准备好计算'操作'的数量,因为“offsite_conversions”总是最后一个,然后计算'1' – swapfile

+0

offsite_conversion有多个实例。你试图得到哪一个?还是你想让他们全部? –

回答

3

使用循环和测试的动作类型。

foreach ($data['data'][0]['actions'] as $action) { 
    if ($action['action_type'] == 'offsite_conversion') { 
     $result = $data['value']; 
     break; 
    } 
} 
0

所以并不完全清楚什么是你想实现的,但在一个简单的方法你可以遍历您$data阵列:

$needed_values = array(); 
foreach ($data['data'] as $item) { 
    foreach ($item['actions'] as $action) { 
     if ($action['action_type'] == 'offsite_conversion') { 
      $needed_values[] = $action['value']; 
     } 
    } 
} 
0

假装$json持有的Facebook

<?php 
$data = json_decode($json); 
$conversions = 0; 
foreach ($data as $datum) { 
    foreach ($datum['actions'] as $action) { 
    if ($action['action_type'] === 'offsite_convserion') { 
     $conversions += (int)$action['value']; 
     break; 
    } 
    } 
} 
+0

第二个'foreach'结束了'$ datum ['actions']' –

+0

谢谢@u_mulder – Jaime

1
数据

因为“offsite_conversions”永远是最后的

如果$data['data'][0]['actions'][LAST VALUE]['value']是你在找什么:

您的计数的想法应该有帮助:

$actions = $data['data'][0]['actions']; 
$index = count($actions) - 1; 

$value = $actions[$index]['value']; 
+0

这里重新创建了一个内置函数。 – AbraCadaver

+2

我不会依赖它总是最后。假设订单是固定的,通常是一个坏主意。 – Jaime

0

Barmar具有最好的办法,如果你不知道它在哪里,但如果你想最后一个要容易得多:

$result = end($data['data'][0]['actions'])['value'];