0

そのため、配列から一度に 4 つのキーだけを取得し、4 番目のキーに到達した後にキー カウントを 0 にリセットしようとしています (配列は 0 から始まるため、実際にはキー #3)。次に例を示します。

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 を index としてドロップし、ずっと $i を使用します。それはうまくいくはずです。この例では、$sql_C が 4 番目の要素ごとに上書きされることに注意してください。また、ループしている配列を決して変更しないでください。ほとんどの場合、結果は期待した結果にはなりません。

if ブロックを switch ケースに置き換えて、より洗練されたコードにすることもできます。

$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;
}

私たちの友人Little Bobby Tablesに言及してくれたAmal Muraiの功績.

于 2014-06-17T05:12:40.827 に答える