数组中的变量:True或False

时间:2012-10-04 06:59:06

标签: php mysql arrays

我试图确定数组中的变量是否存在,以及它是否为“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';}
     }
  }
  }
  } 
  }   
?>

假设下面的数字在SESSION print_r($ cart)中:

Array ( [image_id] => 42 ) false

Array ( [image_id] => 45 ) false

Array ( [image_id] => 50 ) true

Array ( [image_id] => 49 ) false  

现在,我如何确定变量50 ($page = $_GET['image_id'];)是否与其他三个一起出现?

1 个答案:

答案 0 :(得分:0)

据我所知,你的代码做了两件事:1 - 检查会话中是否存在密钥images_$page,2 - 检查数据库中是否存在image_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。它比对substr()函数进行2次调用要快。

此外,由于我们只需检查是否存在给定图像,foreach循环将替换为if

之后,运行MySQL查询,由于我们只需要第一次匹配,因此添加LIMIT 1以使查询更快。此外,与image_id的比较已经包含在查询中,因此它足以测试是否有返回的行(这就是原始whileif替换的原因)。