2012-10-04 27 views
0

我试图确定数组中的某个变量是否存在,以及它是否为“真”状态,以及它是否为“假”状态。问题是,我receiveing所有数组变量的响应,当时我只是想知道,如果页面变量存在与链接的阵列状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(以$车):

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

难道你不能只是'$ cart_info_row ['image_id'] == $ page'? –

+0

不是'$ cart_info_row ['image_id']'与'$ id'相同吗?为什么您需要执行查询,除了确认是否有包含该图像ID的行?为什么当数组只有一个元素时使用'in_array()'? – Barmar

回答

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用来检查是否存在$_SESSION关键images_$page。它比打电话给substr()函数要快。

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

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

+1

非常感谢!看起来不错。唯一需要替换的项目是$ page和$ page。再次感谢! – user1719142