所以我试图从阵列中一次只抓取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
我尝试过使用未设置($ key [' 0']),取消设置($ 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次计数后重置密钥时遇到了一些困难。有人可以指出我做错了什么或我错过了什么?感谢
答案 0 :(得分: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的评论应该有助于澄清原因。
答案 1 :(得分:0)
将$ key作为索引删除并一直使用$ i。这应该工作。不要在这个示例中为每个第4个元素覆盖$ sql_C。也永远不会更改您循环播放的数组,大多数情况下的结果都不会是您期望的结果。
你可以用if开关盒代替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的信用。