PHP处理不确定的输入数据

时间:2016-06-03 17:10:35

标签: php arrays

有时我们会收到不同结构的输入数据,例如来自在线API的响应可能包含一些信息,但其他信息不包括,某些细节存储在复杂的嵌套数组中等。 我喜欢在使用之前解析这些数据,这样我以后就不必反复使用isset(),例如:

$input; // source
$correct_data = arra(); // verified data
$correct_data["option-1"] = (isset($input["option-1"]) ? $input["option-1"] : "");
$correct_data["option-2"] = (isset($input["option-2"]) ? $input["option-2"] : "");

现在我可以使用:

my_function($correct_data["option-1"]);
my_function2($correct_data["option-2"]);

我知道对于未初始化的变量或未知的数组键不会有任何警告。 但是嵌套数据会出现问题,例如

$input = array(
    "settings-main" => array(
        "option-1" => "val-1",
        "option-2" => "val-2",
        "sub-settings" => array(
            "my-option" => "some val",
            "my-option-2" => "some val2",
        ),
    ),
    "other-settings" => array(
        "other" => array(
            "option-1" => "a",
            "option-2" => "b",
        ),
    ),
);

在开始时很难检查这个,后来我必须使用这样的东西:

if(isset($input["settings-main"]))
{
    if(isset($input["settings-main"]["option-1"]))
        $input["settings-main"]["option-1"]; //do something
    if(isset($input["settings-main"]["sub-settings"]))
    {
        if(isset($input["settings-main"]["sub-settings"]["my-option-2"]))
            $input["settings-main"]["sub-settings"]["my-option-2"]; //do something
    }
}

您是否有任何建议如何在不使用多个isset()指令的情况下处理此类情况?

1 个答案:

答案 0 :(得分:0)

尝试使用递归函数调用。

function recursive_arr($input){
    foreach($input as $val){
        if(is_array($val)){
            recursive_arr($val);
        }else{
            echo $val."<br/>";
        }
    }
}

recursive_arr($input);

Working Example