如何从$ _POST数组中过滤空键/值对?

时间:2016-10-03 13:52:15

标签: php arrays

我正在尝试为非空键值对创建php数组(关联)声明,我从$ _POST获取。任何猜测,怎么做?

$my_array = [

"k1"=>"$val1",
"k2"=>"$val2",
"k3"=>"$val3",
"k4"=>"$val4"

];

但是,如果$ val4& $ val3为空/ NULL /确实存在,然后:

$my_array = [

"k1"=>"$val1",
"k2"=>"$val2"

];

由于

3 个答案:

答案 0 :(得分:0)

$ _ POST已经是一个关联数组。例如,对于表单,键是元素名称'并且值是用户的输入。空输入仍会生成键/值对,但您可以使用array_filter()

轻松过滤这些键

编辑:

以下是一个示例实现:

array_filter($array, function(x) { 
    if is_null(x) return false;
    else return true;
});

答案 1 :(得分:0)

正如其他人提到的,你可以使用数组过滤器,

如果您不希望将0的值视为空,则可以执行此类操作

$post = array_filter( $_POST, function( $item ){ return strlen( $item ); });

数组过滤器会处理0''falsenull,我认为'0'可能还有其他一些都是空的。您可以使用回调,例如我的示例。当回调返回false 0时,项目在返回true(或> 0)时被删除,它将被保留。因此strlen将返回一个等于字符串长度的值,然后删除任何0长度的字符串。

-note-这应该对$ _POST很好,因为它通常不会有任何嵌套数组,但如果有嵌套数组,那么strlen显然不能在数组上工作(在回调中是这个$item = array() )。

答案 2 :(得分:-1)

您可以编写一个函数来检查null或空值,如下所示:

RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteRule ^(.*)$ /profile.php?p=$1 [R=301,L]

print_r()的输出示例:

<?php

function transform(&$data) {
    foreach(array_keys($data) as $key) {
        if( is_null($data[$key]) 
            || empty($data[$key]) 
        ) {
            unset($data[$key]);
        } 
    }
}

// usage
$data = [
    "example1" => 5,
    "example2" => "some text",
    "example3" => null,
    "example4" => [],
];

transform($data);

print_r($data);

?>