You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP基于GET参数按面积价格过滤项目列表的逻辑问题

故障原因
  • 逻辑判断顺序错误:当前代码的分支判断逻辑仅优先校验「四参数全传且全部满足」的场景,只要该场景不命中,后续的单参数判断分支会直接忽略其他维度的过滤条件,比如同时传入面积下限和价格上限时,只要项目满足面积下限,哪怕价格超出上限也会被判定为显示,这是多参数组合过滤失效的核心原因。
  • 参数类型不匹配:面积、价格都是数值类型,你使用$sanitizer->text()处理参数得到的是字符串,做大小比较时会触发字符串规则(例如字符串层面"100" < "20"判定为真),进一步导致判断异常。
修复方案

调整判断逻辑,先分别校验面积、价格两个维度的合法性,只要两个维度同时满足过滤要求就展示项目,否则隐藏,同时将参数转换为数值类型:

<?php
    // 改用数值类 sanitizer 方法,确保参数为数字类型
    $min_quadrature = $sanitizer->float($input->get->min_quadrature);
    $max_quadrature = $sanitizer->float($input->get->max_quadrature);
    $min_price = $sanitizer->float($input->get->min_price);
    $max_price = $sanitizer->float($input->get->max_price);
?>
<div class="gallery-items four-columns grid-small-pad">
    <?php foreach($pages->find("parent=projects") as $parent): ?>
    <?php
        // 初始化两个维度的校验结果为合法
        $quadrature_valid = true;
        $price_valid = true;
        
        // 单独校验面积维度
        if (!empty($min_quadrature) && $parent->quadrature < $min_quadrature) {
            $quadrature_valid = false;
        }
        if (!empty($max_quadrature) && $parent->quadrature > $max_quadrature) {
            $quadrature_valid = false;
        }
        
        // 单独校验价格维度
        if (!empty($min_price) && $parent->price < $min_price) {
            $price_valid = false;
        }
        if (!empty($max_price) && $parent->price > $max_price) {
            $price_valid = false;
        }
        
        // 两个维度都合法才展示
        $show = $quadrature_valid && $price_valid ? "d-block" : "d-none";
    ?>
    <div class="gallery-item projects <?= $show; ?>" data-budget="<?= $parent->price; ?>" data-quadrature="<?= $parent->quadrature; ?>">
        <div class="grid-item-holder">
            <?php 
                $image = $parent->background;
                $thumb = $image->size(300, 170); 
            ?>
            <img src="<?= $thumb->url; ?>" alt="">
            <div class="port-desc-holder">
                <div class="port-desc">
                    <div class="grid-item mt-2">
                        <h3 class="m-0"><a href="<?= $parent->url; ?>"><?= $parent->title; ?></a></h3>
                        <p class="price d-none"><?= $parent->price; ?></p>
                        <p class="quadrature p-0 m-0"><?= $parent->quadrature; ?> m2</p>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <?php endforeach ?>
</div>

修复后的逻辑支持任意参数组合的过滤场景:单参数过滤、面积区间/价格区间单独过滤、面积+价格组合过滤都可以正常生效。

内容的提问来源于stack exchange,提问作者Elexer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 09:24:08