我有一个ID数组,用于在foreach循环中执行mysqli查询(以下代码仅是一个示例-该数组将包含50多个元素/ ID)。对于每个数组元素/ ID,我查询一个数组,然后将其包含在compData数组中。但是,我不确定如何在foreach循环中动态定义数组。如果您可以在下面检查我是否正确使用$ {$ val}或其他错误,将不胜感激。谢谢。
$idArray = array(
"List1",
"List2",
);
$compData = array();
foreach($idArray as $val) {
$sth = mysqli_query($conn, "SELECT * FROM {$tableName} WHERE ID = {$val}");
${$val} = array();
while($r = mysqli_fetch_array($sth)) {
For ($n = 1; $n <= $CI_NOYEARS; $n++){
${$val}['data'][] = $r[$n];
}
}
$compData[{$val}] = ${$val}
}
foreach($compData['List1'] as $result) {
For ($n = 0; $n <= $CI_NOYEARS; $n++){
echo $result[$n];
}
}
上面的代码不起作用,也不回显$ compData数组中的任何数据。下面是一个可以正常工作的示例,其中我直接使用ID来执行代码。
$sth = mysqli_query($conn, "SELECT * FROM {$tableName} WHERE ID = 'List1'");
$List1 = array();
while($r = mysqli_fetch_array($sth)) {
For ($n = 1; $n <= $CI_NOYEARS; $n++){
$List1['data'][] = $r[$n];
}
}
$companyData = array();
$companyData['List1'] = $List1;
foreach($compData['List1'] as $result) {
For ($n = 0; $n <= $CI_NOYEARS; $n++){
echo $result[$n];
}
}
答案 0 :(得分:1)
根据您提供的代码来确定目标是什么有点困难,但似乎要复杂得多。我想我在这里可以复制您想要的输出。
您还应该使用准备好的语句;它们更安全,并且当您要重复多次相同的查询时,可以节省数据库查询的大量开销。我已经在这里实现了。
$idArray = ["List1", "List2"];
$sth = $conn->prepare("SELECT * FROM `$tableName` WHERE ID = ?");
foreach($idArray as $val) {
$data = [];
$sth->bind_param("s", $val);
$sth->execute();
$result = $sth->get_result();
while ($r = $result->fetch_array()) {
$data = array_merge($data, array_splice($r, 1, $CI_NOYEARS));
}
$compData[$val]["data"] = $data;
}
foreach($compData["List1"]["data"] as $result) {
echo $result;
}
答案 1 :(得分:0)
我什至不明白为什么只将其复制到多维compData数组中时会使用大括号符号?为什么不直接将数据放入数组:
for ($n = 1; $n <= $CI_NOYEARS; $n++) {
$compdata[$val]['data'][] = $r[$n];
}
(当然,您还需要在foreach
的顶层将其声明为数组。)
旁注:我建议不要像这样直接将数据插值到查询字符串中,而应使用绑定参数:http://php.net/manual/en/mysqli-stmt.bind-param.php更加安全。