如何在if语句中排除参数?

时间:2019-03-11 22:35:50

标签: php

我正在尝试使用PHP创建某种模糊搜索。请考虑下面的以下伪代码/方案。

采用以下$_POST ed值:

name
price
location
age

我有一组项目(假设汽车),其中每个项目都包含以下属性:

name
price
location
age

因此,在我的函数中,我在if()中使用foreach()来检查是否有任何发布的数据与某项匹配,如果匹配,则回显该项。

function search() {

 $items = array(...);

 $name = $_POST['name'];
 $price = $_POST['price'];
 $location = $_POST['location'];
 $age = $_POST['age'];

 foreach($items as $item) {
   if(
    $item['name']  ==  $name &&
    $item['price'] == $price &&
    $item['location'] == $location &&
    $item['age'] == $age
    ){
      echo json_encode($item);
    } 

 }

}

问题在于,并非每个填写的值都被填写,因此$name可能为空,即$name = ''

问题:如果初始的if()密钥为空而不创建$_post初始类型,如何排除if()语句中的任何项目场景?我考虑过使用||,但我敢肯定,这与排除所有比较结果并不相同。 A

1 个答案:

答案 0 :(得分:2)

您可以通过使用PHP的lazy interpreter来实现:

if(
    (!$name || ($name && $item['name']  ==  $name)) &&
    (!$price || ($price && $item['price'] == $price)) &&
    (!$location || ($location && $item['location'] == $location)) &&
    (!$age || ($age && $item['age'] == $age))
    ){
      echo json_encode($item);
    } 

这将首先检查每个变量都不为null也不为空。 (How exactly does if($variable) work?) 也请看Does PHP have short-circuit evaluation?