0

2 つの配列を比較したいのですが、1 つはデフォルトで設定され、もう 1 つはユーザー入力によって設定されています。

デフォルトでのみブール値を設定した場合、ユーザーが文字列または数値を使用しないようにしたい。たとえば、'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 のみ」を返します。どうすればこれを修正できますか?

4

1 に答える 1

0

まず$config、 にキーが含まれていることを確認する必要があります$default。[余談:$configユーザーが提供する場合...そのようなオブジェクトをユーザーが提供することはできません。おそらく$config=array("randomize"=>"truex");..ユーザーが提供するということは、ユーザーとしての他の開発者(Webユーザーではない)を意味しない限り)。

第二に、$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 に答える