有时我们会收到不同结构的输入数据,例如来自在线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()指令的情况下处理此类情况?
答案 0 :(得分:0)
尝试使用递归函数调用。
function recursive_arr($input){
foreach($input as $val){
if(is_array($val)){
recursive_arr($val);
}else{
echo $val."<br/>";
}
}
}
recursive_arr($input);