0

我想比较两个数组,一个是默认设置的,另一个是用户输入的。

当我仅在默认值中设置布尔值时,我想确保用户不会使用字符串或数字。例如,'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));

但是即使用户提供了正确的数据类型,此代码也会返回“仅真或假”。我怎样才能解决这个问题?

4

1 回答 1

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));
于 2012-09-17T14:28:09.987 回答