2016-07-05 102 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

我的錯誤,初始化它在錯誤的地方。 –