我有一些PHP代码,由于某些原因令我感到困惑。我知道我需要迭代数组并为数组中的每个值运行一个SQL查询,但我在代码中迷失了如何做到这一点:
$kit_bin_count = 0;
$kit_itemno_array = null;
$kit_bin_array = null;
// iterate through array
while ($kit_row = odbc_fetch_array($result_ickitd)) {
// store results from mysql in our own PHP array
$kit_itemno_array[$kit_count] = $kit_row['COMPONENT'];
// increment counter
$kit_count++;
}
for($k=0;$k<sizeof($kit_itemno_array);$k++) {
$var_kit_item = $kit_itemno_array[$k];
$newvar_kit_item = trim($var_kit_item);
}
/* $params = "'".implode("','",$kit_itemno_array)."'";
echo "$params"; */
/* foreach ($kit_itemno_array as $country)
{
$query .= "OR stv.name = '{$country}', ";
} */
$sql_kit_bin="SELECT * FROM icitem, iciloc WHERE icitem.itemno = '$kit_itemno_array[$k]' AND iciloc.itemno = icitem.itemno";
$result_kit_bin=odbc_exec($conn,$sql_kit_bin);
while ($kit_bin_row = odbc_fetch_array($result_kit_bin)) {
$kit_bin_array[$kit_bin_count] = $kit_bin_row['PICKINGSEQ'];
$kit_bin_count++;
print_r($kit_bin_array);
}
// END KITTING
echo "<span style=\"color:#66CCFF\">";
echo "$kit_bin_array[$k]";
foreach ($kit_bin_array as $kit_bin) {
// if(strpos($file_array, $kit_item ) !== FALSE) {
echo '<br />' . $kit_bin ; }
// else {
// $kit_post_array[] = $kit_item;
// echo '<br />' . 'KI: ' . $kit_item ; }
// }
echo "</span>";
我的代码正确返回第一个值并将其放在$kit_item_array
变量中,但是其他行会丢失。我不确定如何在现有循环中循环这样,所以一切都正确返回。
以下是结果的屏幕截图,包括要返回的print_r()
个数组。
答案 0 :(得分:2)
如果您正确缩进代码,您会发现很多更容易发现代码中的问题。在您的情况下,我怀疑问题在于}
这里的额外for($k=0;$k<sizeof($kit_itemno_array);$k++) {
$var_kit_item = $kit_itemno_array[$k];
$newvar_kit_item = trim($var_kit_item);
} // <<--- This closes the loop when I don't think you meant to
:
SELECT COMPONENT FROM items
我怀疑(假设您正在使用MySQL,正如您的一条评论所暗示的那样)您可以将代码缩减为一个循环和一个查询。我不能给你完整的代码,因为你的第一个查询没有显示,但为了这个例子的目的,我们说它是:
SELECT *
FROM icitem t
JOIN iciloc l ON l.itemno = t.itemno
WHERE t.itemno IN (
SELECT COMPONENT
FROM items
)
如果我们将您的第二个查询(上面显示的查询)转换为:
{{1}}
...它几乎使该查询之前的所有代码都无意义。