缩短php和jquery的这段代码,可以吗?

缩短php和jquery的这段代码,可以吗?,php,jquery,Php,Jquery,所以我有一个包含数组的URL。当页面刷新时,我想检查URL中是否仍存在某些值,如果不存在,则删除可能与之关联的任何cookie 代码如下: <?php if((isset($_GET['categories']) && !in_array(2, $_GET['categories']))) { ?> if($.cookie('hf')=='1'){$.removeCookie('hf');} <?php } if((isset($_GET['catego

所以我有一个包含数组的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 } ?>

if($.cookie('hf')='1'){$.removeCookie('hf');}
如果($.cookie('hb')='1'){$.removeCookie('hb');}
如果($.cookie('hp')='1'){$.removeCookie('hp');}
如果($.cookie('hw')=='1'){$.removeCookie('hw');}
这非常有效,但这是检查阵列和清除任何最终cookie的最佳方法吗


感谢您的帮助或确认。谢谢。

不一定更具可读性(但如果重命名函数和参数,则可能更具可读性),但这较短,应该可以工作

<?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'); ?>

不一定更具可读性(但如果重命名函数和参数,则可能更具可读性),但这较短,应该可以工作

<?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'); ?>
这应该可以做到:

<?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.'\');}';
        }
    }
}
?>

这不是更短,而是更干净。

这应该可以做到:

<?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.'\');}';
        }
    }
}
?>


这不是更短,而是更干净。

我发现这个解决方案很简单,而且很容易在将来扩展:

$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 . '");};';
    }
}

希望能有所帮助。

我觉得这个解决方案很简单,将来也很容易扩展:

$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 . '");};';
    }
}


希望能有帮助。

我想你可能正在寻找codereview.stackexchange.com。我从来不知道它存在,谢谢你!我想你可能正在寻找codereview.stackexchange.com。我从来不知道它的存在,谢谢你plantheldea!您忘记了用
$
作为变量前缀,并用
$a
替换
2
)谢谢,忽略了这一点。很遗憾,这会导致编码错误,甚至是编辑过的版本。您忘记了用
$
作为变量前缀,并用
$a
;)替换
2
)谢谢,忽略了这一点。这是提取编码错误,甚至是编辑过的版本。不幸的是,这是删除cookie,即使URL中有值。我只想在URL中没有值的情况下删除cookie。有趣的是,我从来不知道你可以像这样在php中回显jquery。而且它工作得很漂亮。非常感谢,现在看起来更专业了!我认为您不知道这一点,这意味着您还没有理解服务器端代码和客户端代码之间的区别。我建议您阅读。这是删除cookie,即使URL中有值。我只想在URL中没有值的情况下删除cookie。有趣的是,我从来不知道你可以像这样在php中回显jquery。而且它工作得很漂亮。非常感谢,现在看起来更专业了!我认为您不知道这一点,这意味着您还没有理解服务器端代码和客户端代码之间的区别。我建议您阅读。这不起作用,可能是因为第一行没有正确地定义为数组。但谢谢你的时间。这一定是由于你的php版本,我将对它进行更改,使其与旧版本的PHPthanks更兼容,以供你输入。我接受另一个答案的原因很简单,因为我对编码有了更好的理解。不用担心。我所做的是过滤数组的值以避免不需要的输入(良好实践)。然后我在数组之间做一个差分以过滤值。然后,我获取该数组的键数组并在其上循环以输出文本。这不起作用,可能是因为第一行没有正确定义为数组。但谢谢你的时间。这一定是由于你的php版本,我将对它进行更改,使其与旧版本的PHPthanks更兼容,以供你输入。我接受另一个答案的原因很简单,因为我对编码有了更好的理解。不用担心。我所做的是过滤数组的值以避免不需要的输入(良好实践)。然后我在数组之间做一个差分以过滤值。然后,我获取该数组的键数组并在其上循环以输出文本。