根据值添加或删除PHP字符串

问题描述

我想从以下代码添加删除PHP字符串/数组:

$params = array_merge([$pstatus,$_POST["minimum_price"],$_POST["maximum_price"]],$branddata);

如果字符串为NULL时,$branddata仍然存在,则sql显示错误。因此,如果$branddata为NULL /空,我想从$branddata删除$params。 如果$branddata的值$branddata应该在$params中,否则就不应该存在。

这是为PDO准备的语句功能。不能使用空的IN()值。

我只能执行以下操作!

$base_sql = "SELECT %s FROM filter WHERE product_status = ?";
$query = sprintf($base_sql,"*")." AND price BETWEEN ? AND ?";
if(!empty($branddata)){
    $query .= "AND brand IN($brand) ";  
} 
    

如何从$branddata添加删除$params

解决方法

您可以使用array_filter从数组中删除空值或空值。


$params = [1,'',null];
print_r($params);

/*
Array
(
[0] => 1
[1] =>
[2] =>
)
*/

$params = array_filter($params);
print_r($params);

/*
Array
(
    [0] => 1
)
*/

不幸的是它将删除所有空参数,包括零和空字符串。如果只希望删除null值,则可以向该函数添加回调以仅检查null。

$params = array_filter($params,function ($v){return $v !== null;});

编辑

除了您说它可以为空/空之外,还没有完全了解$branddata中的内容,所以我不得不猜测一下。

首先,如果$branddata实际上为空,则array_merge会吓跑,我将用一个简单的空合并运算符$branddata ?? []来解决这个问题。

以下是一个示例,它可以做更多的事情:

$branddata = ['',null];
$params = array_filter(array_merge(['alpha','beta'],$branddata ?? []));

这会吐出一个数组:

Array
(
    [0] => alpha
    [1] => beta
)

编辑

最适合您的文字版本是:

$params = array_filter(array_merge([$pstatus,$_POST["minimum_price"],$_POST["maximum_price"]],$branddata ?? []));