【发布时间】:2012-03-04 20:31:32
【问题描述】:
我正在尝试创建自己的自定义验证器类,我可以检查用户提供的值的长度。我知道那里有很多已经创建的选项,但我正在尝试学习 PHP,创建自己的工作是我想要采用的方法。
我将尝试解释我在这里所做的事情,希望我不会失去任何人。我会尽量让代码为我说话。我将首先展示我将用于获取发布信息的多维数组:
$input_array = array('username' => array( 'value'=> $_POST['username'],
'min' => 3,
'max' => 20
),
'password' => array( 'value'=> $_POST['password'],
'min' => 8,
'max' => 16
),
'email' => array( 'value'=> $_POST['email'],
'min' => 6,
'max' => 50
)
);
创建对象:
$obj = new Validate(array_map('mysql_real_escape_string',$input_array));
$vl = $obj->ValidateLength();
所以在这里我将展示课程:
class Validate
{
private $inputArray;
public function __construct($inputAray)
{
$this->inputArray = $inputArray;
}
public function ValidateLength()
{
$larray = array('error'=>'','data'=> array());
foreach($this->inputArray as $k => $i)
{
if(strlen($i['value']) < $i['min'])
{
$larray['error'] = true;
$larray['data'][$k] = ' must be at least '.$i['min'].' characters long';
}
}
return json_encode($larray);
}
}
该类所做的是检查输入值并查看它是否适合我放入数组中的min 和max。如果发现错误,它会将错误值更改为 true,并将所有错误放入数组中以 JSON 格式返回。
现在我有了这个小家伙:
$length = json_decode($obj->ValidateLength(),true);
这会将 JSON 转换为另一个多维数组,如下所示:
var_dump($length)
array(2){
["error"]=>
bool(true)
["data"]=>
array(1){
["username"]=>
string(35)" must be at least 3 charracters long"
["password"]=>
string(35)" must be at least 8 characters long"
}
}
所以这就是问题出现的地方。我有这个条件,它注意到有一个错误,应该打印出username 和password 的错误消息:
$key = implode("\n",array_keys($length['data']));
$value = implode(", ",array_values($length['data']));
if($length['error'])
{
print("Error :\n\n".strtoupper($key).$value);
}
else
{
print('everything is within parameters');
}
我得到的是这样的:
Error:
USERNAME
PASSWORD must be at least 3 characters long, must be at least 8 characters long
我想要的是这个:
Error:
USERNAME must be at least 3 characters long
PASSWORD must be at least 8 characters long
需要注意的一点是,如果条件中完全可能的话,我会尽量避免使用foreach(),以使其更容易清理。同时牢记模块化,我希望能够在第一个初始数组中更改 username password email,以便让用户输入与其他项目一起使用。
如果没有很好地解释自己,并且如果您对我正在努力实现的目标感到迷茫,请告诉我,我会做得更好。提前感谢您观看!
【问题讨论】:
标签: php json multidimensional-array