2016-07-05 135 views
0

我遇到了填充我的数组的问题。我有一个csv文件,其中有1列包含一些id。我加载和处理CSV和使用数组落得像这样将数据添加到关联数组

array:5 [▼ 
    0 => array:2 [▼ 
    0 => "ID123" 
    ] 
    1 => array:2 [▼ 
    0 => "ID234" 
    ] 
    2 => array:2 [▼ 
    0 => "ID345" 
    ] 
    3 => array:2 [▼ 
    0 => "ID456" 
    ] 
    4 => array:2 [▼ 
    0 => "ID567" 
    ] 
] 

使用上的ID,这些ID我打了一个API来获取特定于该ID数据。所以我循环包含的ID,并完成类似下面

$jobData = array(); 

foreach($csv as $data) { 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, "https://api.somdomain/some.api/get/".$data[0]."); 
    //other curl stuff 

    $output = curl_exec($ch); 
    $output = new \SimpleXMLElement($output); 
} 

阵列现在,如果我输出输出的结果,我得到这样的事情

SimpleXMLElement {#352 ▼ 
    +"Job": SimpleXMLElement {#383 ▼ 
    +"ID": "ID123" 
    +"Client": SimpleXMLElement {#387 ▼ 
     +"ID": "12345" 
    } 
    +"Assigned": SimpleXMLElement {#392 ▼ 
     +"Staff": array:5 [▼ 
     0 => SimpleXMLElement {#403 ▼ 
      +"ID": "12345" 
     } 
     1 => SimpleXMLElement {#404 ▼ 
      +"ID": "23456" 
     } 
     2 => SimpleXMLElement {#405 ▼ 
      +"ID": "34567" 
     } 
     ] 
    } 
    } 
} 

所以我需要建立一个数组包含我拥有的所有ID的数据。因此,在上面的foreach循环中,我正在做类似这样的事情。

foreach($csv as $data) { 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, "https://api.somdomain/some.api/get/".$data[0]."); 
    //other curl stuff 

    $output = curl_exec($ch); 
    $output = new \SimpleXMLElement($output); 

    if (!empty($output)) { 
     $jData['jobInfo'] = array(
      'clientId' => (string)$output->Job->Client->ID, 
      'startDate' => '20160701', 
      'dueDate' => '20160731' 
     ); 

     if(!empty($output->Job->Assigned->Staff)) { 
      foreach ($output->Job->Assigned->Staff as $staff) { 
       $jData['staffInfo'][] = array(
        'staffId' => (string)$staff->ID 
       ); 
      } 
     } 
    } 
    $jobData[] = $jData; 
} 

现在,这可以工作到一个点。我添加了一个额外的[] onyo staffInfo元素,因为上面的输出可以显示超过1个职员。我在上面的 的问题是它似乎重复了一些事情。所以jobData数组的输出如下

array:5 [▼ 
    0 => array:4 [▼ 
    "jobInfo" => array:4 [▶] 
    "staffInfo" => array:5 [▶] 
    ] 
    1 => array:4 [▼ 
    "jobInfo" => array:4 [▶] 
    "staffInfo" => array:6 [▶] 
    ] 
    2 => array:4 [▼ 
    "jobInfo" => array:4 [▶] 
    "staffInfo" => array:7 [▶] 
    ] 
    3 => array:4 [▼ 
    "jobInfo" => array:4 [▶] 
    "staffInfo" => array:8 [▶] 
    ] 
    4 => array:4 [▼ 
    "jobInfo" => array:4 [▶] 
    "staffInfo" => array:15 [▶] 
    ] 
] 

正如你所看到的,元素0对于staffInfo有一个大小为5的数组。元素1增加到6,元素2是7,元素3是8,元素4是15.如果我手动检查API调用的系统, 元素0应该有5,这是正确的。元素1应该有1,元素2应该有1,元素3应该有1,元素4应该有7.

那么,如何阻止将前面的循环结果添加到下一个结果?

感谢

+0

此行:'curl_setopt($ ch,CURLOPT_URL,“https://api.somdomain/some.api/get/”。$ data [0]。“);'是语法错误。 –

+0

对不起,删除代码,以减少发布的内容 –

回答

1

你不初始化$jData任何地方。这是一个不好的做法。结果,它总是一样的。您继续覆盖jobInfo,并继续添加到staffInfo

您需要在每次迭代开始时初始化数组。

+0

嗨,我已经初始化它,但现在相同的结果 –

+0

我的错误,初始化它在错误的地方。 –