所以我有一个包含数组的URL。当页面刷新时,我想检查URL中是否仍存在某些值,如果没有,请删除可能与之关联的任何cookie。
代码如下:
<?php if((isset($_GET['categories']) && !in_array(2, $_GET['categories']))) { ?>
if($.cookie('hf')=='1'){$.removeCookie('hf');}
<?php } if((isset($_GET['categories']) && !in_array(7, $_GET['categories']))) { ?>
if($.cookie('hb')=='1'){$.removeCookie('hb');}
<?php } if((isset($_GET['categories']) && !in_array(5, $_GET['categories']))) { ?>
if($.cookie('hp')=='1'){$.removeCookie('hp');}
<?php } if((isset($_GET['categories']) && !in_array(4, $_GET['categories']))) { ?>
if($.cookie('hw')=='1'){$.removeCookie('hw');}
<?php } ?>
这很有效,但它是检查阵列和清除任何最终cookie的最佳方式吗?
感谢任何帮助或确认。感谢。
答案 0 :(得分:2)
这应该这样做:
<?php
if(isset($_GET['categories']))
{
foreach(array(2 => 'hf', 4 => 'hw', 5 => 'hp', 7 => 'hb') as $key => $value)
{
if(!in_array($key, $_GET['categories']))
{
echo 'if($.cookie(\''.$value.'\')==\'1\'){$.removeCookie(\''.$value.'\');}';
}
}
}
?>
这不短,但更清洁。
答案 1 :(得分:1)
不一定更具可读性(但如果重命名函数和参数,则可读),但这个更短,应该可以使用。
<?php function x($a,$b) {if((isset($_GET['categories']) && !in_array($a, $_GET['categories']))) { echo "if($.cookie('".$b."')=='1'){$.removeCookie('".$b."');";}
x(2,'hf');
x(7,'hb');
x(5,'hp');
x(4,'hw'); ?>
答案 2 :(得分:1)
我发现这个解决方案很简单,并且在将来也很容易扩展:
$a = array("hf" => 2, "hb" => 7, "hp" => 5, "hw" => 4);
$b = filter_input(INPUT_GET, 'categories', FILTER_VALIDATE_INT, FILTER_REQUIRE_ARRAY);
if ($b) {
$keys = array_keys(array_diff($a, $b));
foreach ($keys as $val) {
echo 'if($.cookie("' . $val . '")=="1"){$.removeCookie("' . $val . '");};';
}
}
希望它有所帮助。