从数组构建字符串,省略PHP中的空值或NULL值

时间:2012-04-16 21:59:26

标签: php mysql database arrays string

我正在尝试从URL参数列表构建一个数组,以便与数据库进行交易。基本上我有几个功能可以做不同的事情。 (插入,更新等)因此,根据具体尝试的内容,可能不需要始终在数据库中使用所有列。

所以说我有这5个可能传递的潜在参数:id,gr,bl,yw,re

如果我要插入一个新行,那么所有5个coulmns都需要某种值。如果我说更新bl列,那么我只传递id和bl参数。

所以我这样做是为了构建查询字符串(不是实际代码只是示例):

foreach($_GET as $key => $value) {
$key = strtolower($key);
if (preg_match($acceptedGETS,$key)) $$key = $value;
}

$table_col = array (
    'p_id' => $_GET['id'],
    'p_gr' => $_GET['gr'],
    'p_bl' => $_GET['bl'],
    'p_yw' => $_GET['yw'],
    'p_re' => $_GET['re']);

$vstring = implode(',' , $table_col);

现在这完全有效,只要所有变量键都有值(或非NULL)。我的问题是,如何从数组中构建一个字符串,但排除没有传递值的键。现在,如果键缺少值,我会得到这个例子:

网址:http://www.mysite.com/myscript.php?id=4&re=9会得到我:

4 ,,,, 9

当我需要获得4,9

谢谢!

3 个答案:

答案 0 :(得分:0)

尝试

$vstring = "";
$acceptedGETS = array("id", "gr", "bl", "yw", "re");
$values = array();
foreach ($_GET as $key => $value)
{
    $k = strtolower($key);
    if (!in_array($k, $acceptedGETS))
        continue;
    $values[$k] = $value;
}
$vstring = implode(",", $values);

答案 1 :(得分:0)

使用$get = array_filter($_GET),它将消除空值或空值。

答案 2 :(得分:-1)

以下是仅使用filter_input_array和过滤器集

的另一种方法
$args = array(
    'id'    => FILTER_VALIDATE_INT,//if it is an integer
    'gr'    => FILTER_SANITIZE_STRIPPED,//in case it is a string
    'bl'    => FILTER_SANITIZE_STRIPPED,
    'yw'    => FILTER_SANITIZE_STRIPPED,
    're'    => FILTER_SANITIZE_STRIPPED,
);

//Filter array values to avoid bad data if nothing found NULL returned
$myInputs = filter_input_array(INPUT_GET, $args);

//if it is an array join it with coma
if(is_array($myInputs))
    $myInputs = implode(',', $myInputs);