请求SQL查询帮助的PHP循环

时间:2012-01-10 23:01:01

标签: php sql arrays loops

我有一些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()个数组。

results

1 个答案:

答案 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}}

...它几乎使该查询之前的所有代码都无意义。