我在填充数组时出现问题。我有一个csv文件,其中包含一些包含一些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;
}
现在这很有用。我在staffInfo元素中添加了一个额外的[] onyo,因为上面的输出可以显示超过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有一个大小为5的数组,用于staffInfo。元素1增加到6,元素2增加到7,元素3增加到8,元素4增加到15.如果我手动检查API正在调用系统, 元素0应该有5是正确的。元素1应为1,元素2应为1,元素3应为1,元素4应为7。
那么如何阻止这个将前面的循环结果添加到下一个结果?
由于
答案 0 :(得分:1)
您无法在任何地方初始化$jData
。这是一种不好的做法。结果,它总是一样的。您将继续覆盖jobInfo
,并继续添加到staffInfo
。
您需要在每次迭代开始时初始化数组。