如何基于isset在回显中发送多个参数

时间:2018-11-21 04:24:54

标签: php

我的分页代码在未设置过滤器的情况下非常有效。但是,当我在页面上使用过滤器时,它会显示每个产品,但是在完成产品后,没有数量的页面将不显示任何内容。我检查了是否可以发送过滤器,如:

if(isset($brand)){
    echo " <a href='{$_SERVER['PHP_SELF'}}?currentpage=$nextpage&brand=$brand'>></a> "
}else{
    echo " <a href='{$_SERVER['PHP_SELF'}}?currentpage=$nextpage'>></a> 
}

但是这不是有效的方法,因为我将不得不检查20个过滤器。我也尝试过添加字符串,然后再将其添加到<a>,但是它不能像这样工作:

$filters;
if(isset($brand)){
    $filters .= "&brand=".$brand;
}

所以我的问题是:有没有一种方法可以检查回显是否设置了过滤器,并将它们全部发送到下一页(例如:品牌,颜色,尺寸..)。

2 个答案:

答案 0 :(得分:2)

使用http_build_query从值数组构建HTTP查询字符串。构建数组时,请使用null合并运算符,以避免出现有关使用未定义变量的通知。

$filter_array = [
    "currentpage" => $nextpage,
    "brand" => $brand ?? "",
    "color" => $color ?? "",
    "size"  => $size ?? "",
    // and the rest of your variables
];
$query = http_build_query($filter_array);

echo sprintf('<a href="%s?%s">&gt;</a>', $_SERVER["PHP_SELF"], $query);

或者,对于不支持的旧PHP版本:

$filter_array = [
    "currentpage" => $nextpage,
    "brand" => isset($brand) ? $brand : "",
    "color" => isset($color) ? $color : "",
    "size"  => isset($size) ? $size : "",
    // and the rest of your variables
];
$query = http_build_query($filter_array);

echo sprintf('<a href="%s?%s">&gt;</a>', $_SERVER["PHP_SELF"], $query);

答案 1 :(得分:0)

这是一种方法

首先将所有过滤器添加到数组中

$filters = array();
$filters['brand'] = $brand;
$filters['color'] = $color;
$filters['size'] = $size;

循环遍历滤镜数组以使参数字符串

$anchor_tag_params = "";
foreach($filters as $key => $value)
{
    $anchor_tag_params .= "&".$key."=".$value;
}

,然后将params字符串附加到锚标记href

$anchor_tag_html = '<a href="'.$_SERVER['PHP_SELF'].'?currentpage='.$nextpage.$anchor_tag_params.'"></a>';