0

所以我试图一次只从数组中抓取 4 个键,然后在达到第 4 个键后将键计数重置为 0(实际上是键 #3,因为数组以 0 开头)。这是一个例子:

0 - USA Mix #1
1 - 24mg
2 - 252
3 - value
4 - USA Mix #1
5 - 24mg
6 - 252
7 - value

我尝试过使用 unset($key['0'])、unset($ket['1']) 等,但没有奏效。我尝试使用 array_shift ,但这似乎不起作用。我想在 4 次计数后重置键模式。原因是,在第 4 个键循环时,它应该执行插入抓取“块”(块包含 4 个键) - 如下所示:

foreach($temp_atts as $key=>$val){


            if($key == 0){
                $attribute_name = $val;
            }
            if($key == 1){
                $attribute_option = $val;
            }

          if($i <= 4){
               $sql_C = "SELECT * FROM attributes WHERE attribute_name = '{$attribute_name}' AND attribute_option = '{$attribute_option}' AND hc_cat = '{$_GET['cat_id']}' AND hc_s_cat = '{$_GET['sub_cat']}' AND hc_prod_id = '{$_GET['prod_id']}'";
               echo $sql_C . '<br>';


            $i = 0;
        }


        $i++;
    }

在第 4 次计数后,我在重置键时遇到了一些困难。有人可以提供一个关于我做错了什么或我错过了什么的指针吗?谢谢

4

2 回答 2

2

这并不完全是对您的问题的直接回答,而是关于如何更好地完成(我认为)您正在尝试做的事情的建议。

考虑使用array_chunk()

// Your current array. Values in [4] and [5] changed slightly for clarity
$arr = array('USA Mix #1','24mg','252','value','USA Mix #2','240mg','252','value');

$chunks = array_chunk($arr, 4);

foreach ($chunks as $chunk) {
    $sql_C = "
    SELECT * FROM attributes
    WHERE attribute_name = '{$chunk[0]}' 
        AND attribute_option = '{$chunk[1]}'
    ";
    echo $sql_C . '<br>';
}

输出:

SELECT * FROM attributes
WHERE attribute_name = 'USA Mix #1' 
    AND attribute_option = '24mg'


SELECT * FROM attributes
WHERE attribute_name = 'USA Mix #2' 
    AND attribute_option = '240mg'

希望我正确理解您的问题,这很有帮助。

*请注意,我遗漏了您的大部分查询,因为我不能支持将$_GET值直接放入查询之类的操作。@Amal Murali 的评论应该有助于澄清原因。

于 2014-06-17T05:11:30.427 回答
0

删除 $key 作为索引并一直使用 $i 。那应该行得通。不要在这个例子中 $sql_C 将被每 4 个元素覆盖。也永远不要改变你循环的数组,大多数情况下的结果不会是你期望的结果。

你可以用 switch case 代替 if 块以获得更漂亮的代码。

$i = 0;
foreach ($temp_atts as $val)
{

   if ($i == 0) {
       $attribute_name = $val;
   } elseif ($i == 1) {
       $attribute_option = $val;
   } elseif($i == 4) {
       // Sanitize input like mentioned in the comments
       $sql_C = "SELECT * FROM attributes WHERE attribute_name = '{$attribute_name}' AND attribute_option = '{$attribute_option}' AND hc_cat = '{$_GET['cat_id']}' AND hc_s_cat = '{$_GET['sub_cat']}' AND hc_prod_id = '{$_GET['prod_id']}'";
       echo $sql_C . '<br>';

       $i = 0;
   }


   ++$i;
}

感谢Amal Murai提到我们的朋友 Little Bobby Tables。

于 2014-06-17T05:12:40.827 回答