2016-07-05 4 views
0

私の配列に値を設定する際に問題が発生しています。私はいくつかのIDを含む1列を持つCSVファイルを持っています。私はロードし、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を含むとI出力出力の結果は、私はだから私は、アレイを構築する必要があり、この

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" 
     } 
     ] 
    } 
    } 
} 

のようなものを取得する場合、次の

$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); 
} 

ような何かを行います私が持っているすべてのIDのデータを含んでいます。私はこの

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; 
} 

ようなものをやっている上に、foreachループ内だから今は、このポイントに動作します。上記の出力が示すようにスタッフが2人以上いる可能性があるので、staffInfo要素に余分な[]を追加しました。私が上記の を持っている問題は、それがいくつかのものを複製するようだということです。したがって、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

私の間違いは間違った場所で初期化していました。 –