我正在尝试从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
时谢谢!
答案 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);