0

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

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

如果我要插入一个新行,所有 5 列都需要某种值。如果我说更新 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

谢谢!

4

3 回答 3

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);
于 2012-04-16T22:05:02.070 回答
0

使用$get = array_filter($_GET)它将摆脱空值或空值。

于 2012-04-16T22:06:20.437 回答
-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);
于 2012-04-16T22:17:18.727 回答