[英]Adding data to associative array
我在填充数组时遇到问题。 我有一个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。
那么,如何停止将以前的循环结果添加到下一个结果呢?
谢谢
您无需在任何地方初始化$jData
。 这是一个坏习惯。 结果,它总是相同的。 您将继续覆盖jobInfo
,并继续添加到staffInfo
。
您需要在每次迭代的开始时初始化数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.