0

配列内の変数が存在するかどうか、それが「true」であるかどうか、そうでない場合は「false」であるかどうかを識別しようとしています。問題は、ページ変数がhttp://example.com/product.php?image_id=50のようなリンクを持つ配列に存在するかどうかだけを知りたいときに、すべての配列変数に対する応答を受信して​​いることです。

<?php 
$page = $_GET['image_id'];
if (!empty($_SESSION)){
foreach($_SESSION as $name => $value2)   {
  if (substr($name, 0, 7)=='images_') {
  $id = substr($name, 7, (strlen($name)-7));
  $get = mysql_query('SELECT * FROM images WHERE image_id='.mysql_real_escape_string((int)$id));
     while ($cart_info_row = mysql_fetch_assoc($get)) {
        $cart = array('image_id' => $cart_info_row['image_id'],);
        if (in_array($page, $cart)){echo 'true';} else {echo 'false';}
     }
  }
  }
  } 
  }   
?>

以下の番号がSESSIONprint_r($ cart)にあると仮定します。

Array ( [image_id] => 42 ) false

Array ( [image_id] => 45 ) false

Array ( [image_id] => 50 ) true

Array ( [image_id] => 49 ) false  

さて、変数50が他の3つなしで存在するかどうかだけを特定するにはどうすればよいですか?($page = $_GET['image_id'];)

4

1 に答える 1

0

私が理解しているように、あなたのコードは2つのことを行います:1-キーimages_$pageがセッションに存在するかどうかをチェックし、2-イメージwithimage_id=$pageがデータベースに存在するかどうかをチェックします。

<?php
$page = $_GET['image_id'];
if(isset($_SESSION['images_'.$page]))
{
    $get = mysql_query("SELECT * FROM images WHERE image_id='".mysql_real_escape_string($page)."' LIMIT 1");
    if($cart_info_row = mysql_fetch_row($get))
    {
        echo 'true';
    }
    else
    {
        echo 'false';
    }
}
else
{
    echo 'false';
}

ここでissetは、キーimages_$pageがに存在するかどうかを確認するために使用され$_SESSIONます。関数を2回呼び出すよりも高速ですsubstr()

また、指定された画像が存在するかどうかを確認するだけでよいため、foreachループは。に置き換えられifます。

その後、MySQLクエリが実行され、最初の一致のみが必要なLIMIT 1ため、クエリを高速化するために追加されます。また、image_idとの比較はすでにクエリに含まれているため、返される行があるかどうかをテストするのに十分です(そのため、originalwhileはに置き換えられifます)。

于 2012-10-04T09:07:03.527 に答える