我想比较两个数组,一个是默认设置,另一个是用户输入。
当我只在默认值中设置一个布尔值时,我想确保用户不会使用字符串或数字。例如,'truex'或'1'是不可接受的。
以下是我的代码示例
$default = array(
"randomise" => false,
"id" => null
);
$config = array(
"randomise" => truex
);
function process_array($default,$config)
{
# Loop the array.
foreach($default as $key => $value)
{
if ((filter_var($default[$key], FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE) === NULL) && (filter_var($config[$key], FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE) === NULL))
{
return 'true or false only';
}
}
# Return the result.
return $array;
}
print_r(process_array($default,$config));
但是此代码仅返回'true或false',即使用户提供了正确的数据类型。我该如何解决这个问题?
答案 0 :(得分:0)
首先,您需要检查$config
是否包含$default
中的密钥。 [助攻:如果$config
是用户提供的......他们永远不会用户提供这样的对象,也许你的意思是$config=array("randomize"=>"truex");
..除非用户提供你的意思是其他开发者作为用户(不是网络用户))。
所有$config['id']
中的第二个将始终在测试时失败(因为它不是布尔值)。
所以,我想猜测你在这里做什么,但我认为这就是你想要的......
$default = array("randomise"=>false,"id"=>null);
//Example input
$config = array("randomise"=>"truex");
function process_array($default,$config) {
foreach($default as $key => $value) {
if (is_bool($default[$key])
&& isset($config[$key])) {
//Update the array with the filtered value
$config[$key]=filter_var($config[$key],FILTER_VALIDATE_BOOLEAN,
FILTER_NULL_ON_FAILURE);
if ($config[$key]===null)
return '$key can be true or false only';
}
}
}
return $array;
}
print_r(process_array($default,$config));