我试图确定数组中的变量是否存在,以及它是否为“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'];)
是否与其他三个一起出现?
答案 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的比较已经包含在查询中,因此它足以测试是否有返回的行(这就是原始while
被if
替换的原因)。