我正在尝试使用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
答案 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?