Php 获取嵌套数组中的数组键值
我需要获取一个键名为Php 获取嵌套数组中的数组键值,php,arrays,oop,pdo,Php,Arrays,Oop,Pdo,我需要获取一个键名为“name”的数组值,但我似乎无法找到它。当用户没有填写字段时,我显示了一个错误,我希望它更加具体。在我的例子中,当我输出一个错误时,页面上说需要填写fname,但在我的脚本中的一个数组中,检查表单中所需的内容,我列出了一个名称,我希望它显示需要填写的名字。我的代码如下 <?php require_once 'Assets/Scripts/Core/Init.php'; if(Input::exists()){ if(Token::check(Input::g
“name”
的数组值,但我似乎无法找到它。当用户没有填写字段时,我显示了一个错误,我希望它更加具体。在我的例子中,当我输出一个错误时,页面上说需要填写fname
,但在我的脚本中的一个数组中,检查表单中所需的内容,我列出了一个名称,我希望它显示需要填写的名字。我的代码如下
<?php
require_once 'Assets/Scripts/Core/Init.php';
if(Input::exists()){
if(Token::check(Input::get('token'))){
$Validate = new Validate();
$Validation = $Validate->check($_POST, array(
'fname' => array(
'name' => 'First Name',
'required' => true,
'min' => '2',
'max' => '16',
'alpha' => true
),
'lname' => array(
'name' => 'Last Name',
'required' => true,
'min' => '2',
'max' => '16',
'alpha' => true
),
'email' => array(
'name' => 'E-Mail',
'required' => true,
'max' => '128',
'email' => true,
'unique' => 'users'
),
'password' => array(
'name' => 'Password',
'required' => true
),
'pn' => array(
'name' => 'Phone Number',
'required' => true,
'max' => '10',
'num' => true
),
'student_id' => array(
'name' => 'School ID',
'required' => true,
'max' => '10',
'num' => true
)
));
if($Validate->passed()){
$user = new User();
$salt = Hash::salt(32);
try {
$user->create('users', array(
'email' => Input::get('email'),
'password' => Hash::make(Input::get('password'), $salt),
'salt' => $salt,
'fname' => Input::get('fname'),
'lname' => Input::get('lname'),
'phone' => Input::get('pn'),
'student_id' => Input::get('student_id'),
'ip' => $_SERVER['REMOTE_ADDR'],
'date' => date('Y-m-d H:i:s'),
'usergroup' => 1
));
} catch(Exception $e) {
die($e->getMessage());
}
}
else {
echo print_r($Validate->errors());
}
}
}
您需要将您的“is required”
部分移出规则
循环,以便您可以轻松地实际使用它。然后您还可以很容易地引用“pretty”
名称
只需将Validate::check
函数更改为:
public function check($data, $items = array()){
foreach($items as $item => $rules){
// check required earlier (moved to here)
if(isset($rules['required']) && $rules['required'] && empty($data[$item])) {
$this->addError($rules['name'] . " is required");
}
请注意,我将其更改为使用$rules['name']
而不是$item
,因此您得到了的“pretty”
名称
foreach($rules as $rule => $rule_value){
trim($value = $data[$item]);
$item = escape($item);
// removed the required check here
else if(!empty($value)){
switch($rule){
case 'min':
if(strlen($value) < $rule_value){
$this->addError("{$item} must be a minimum of {$rule_value} characters.");
}
break;
case 'max':
if(strlen($value) > $rule_value){
$this->addError("{$item} must be a maximum of {$rule_value} characters.");
}
break;
case 'matches':
if($value != $data[$rule_value]){
$this->addError("{$rule_value} must match {$item}");
}
break;
case 'unique':
$check = $this->_db->get($rule_value, array($item, '=', $value));
if($check->count()){
$this->addError("{$item} already exists.");
}
break;
case 'email':
if(!filter_var($value, FILTER_VALIDATE_EMAIL)) {
$this->addError("{$item} is not a valid email.");
}
break;
case 'num':
if(!is_numeric($value)){
$this->addError("{$item} can only contain numbers.");
}
break;
case 'alpha':
if(!ctype_alpha($value))
{
$this->addError("{$item} can only contain letters.");
}
break;
}
}
}
}
}
foreach($rules as$rule=>$rule\u值){
修剪($value=$data[$item]);
$item=转义($item);
//在此处删除所需的复选框
如果(!空($value)){
开关($规则){
案例“min”:
if(strlen($value)<$rule\u值){
$this->addError(“{$item}必须至少为{$rule_value}个字符。”);
}
打破
案例“max”:
if(strlen($value)>rule_值){
$this->addError(“{$item}必须最多为{$rule\u value}个字符。”);
}
打破
案例“匹配”:
如果($value!=$data[$rule\u value]){
$this->addError(“{$rule_value}必须匹配{$item}”);
}
打破
“唯一”情况:
$check=$this->\u db->get($rule\u value,array($item,'=',$value));
如果($check->count()){
$this->addError(“{$item}已经存在。”);
}
打破
“电子邮件”案例:
如果(!filter\u var($value,filter\u VALIDATE\u EMAIL)){
$this->addError(“{$item}不是有效的电子邮件。”);
}
打破
案例“num”:
如果(!是数值($value)){
$this->addError(“{$item}只能包含数字。”);
}
打破
案例“阿尔法”:
如果(!ctype_alpha($value))
{
$this->addError(“{$item}只能包含字母。”);
}
打破
}
}
}
}
}
将$item更改为$rules['name']
public function check($data, $items = array()){
foreach($items as $item => $rules){
foreach($rules as $rule => $rule_value){
trim($value = $data[$item]);
$item = escape($item);
if($rule === 'required' && empty($value)){
$this->addError("{$rules['name']} is required");
}
else if(!empty($value)){
switch($rule){
case 'min':
if(strlen($value) < $rule_value){
$this->addError("{$item} must be a minimum of {$rule_value} characters.");
}
break;
case 'max':
if(strlen($value) > $rule_value){
$this->addError("{$item} must be a maximum of {$rule_value} characters.");
}
break;
case 'matches':
if($value != $data[$rule_value]){
$this->addError("{$rule_value} must match {$item}");
}
break;
case 'unique':
$check = $this->_db->get($rule_value, array($item, '=', $value));
if($check->count()){
$this->addError("{$item} already exists.");
}
break;
case 'email':
if(!filter_var($value, FILTER_VALIDATE_EMAIL)) {
$this->addError("{$item} is not a valid email.");
}
break;
case 'num':
if(!is_numeric($value)){
$this->addError("{$item} can only contain numbers.");
}
break;
case 'alpha':
if(!ctype_alpha($value))
{
$this->addError("{$item} can only contain letters.");
}
break;
}
}
}
}
公共函数检查($data,$items=array()){
foreach($items为$item=>$rules){
foreach($rules as$rule=>$rule\u值){
修剪($value=$data[$item]);
$item=转义($item);
如果($rule=='required'&&empty($value)){
$this->addError(“{$rules['name']}是必需的”);
}
如果(!空($value)){
开关($规则){
案例“min”:
if(strlen($value)<$rule\u值){
$this->addError(“{$item}必须至少为{$rule_value}个字符。”);
}
打破
案例“max”:
if(strlen($value)>rule_值){
$this->addError(“{$item}必须最多为{$rule\u value}个字符。”);
}
打破
案例“匹配”:
如果($value!=$data[$rule\u value]){
$this->addError(“{$rule_value}必须匹配{$item}”);
}
打破
“唯一”情况:
$check=$this->\u db->get($rule\u value,array($item,'=',$value));
如果($check->count()){
$this->addError(“{$item}已经存在。”);
}
打破
“电子邮件”案例:
如果(!filter\u var($value,filter\u VALIDATE\u EMAIL)){
$this->addError(“{$item}不是有效的电子邮件。”);
}
打破
案例“num”:
如果(!是数值($value)){
$this->addError(“{$item}只能包含数字。”);
}
打破
案例“阿尔法”:
如果(!ctype_alpha($value))
{
$this->addError(“{$item}只能包含字母。”);
}
打破
}
}
}
}
考虑到你在这里使用了大量的魔法函数,而且还没有费心向我们展示这些函数的源代码……不,我们帮不了你。你应该发布你的get
method@Tularis它有很多类,但你不需要它们来获取这个值。我想你会使用foreach循环来获取这个值,但我不太确定正确的方法。@EmilioPort我发布了我的验证类您甚至需要一个循环来获取此值感谢您的帮助,但是移动if语句没有任何作用,我看到您在切换2时更改了$item tp$rules['name']。
foreach($rules as $rule => $rule_value){
trim($value = $data[$item]);
$item = escape($item);
// removed the required check here
else if(!empty($value)){
switch($rule){
case 'min':
if(strlen($value) < $rule_value){
$this->addError("{$item} must be a minimum of {$rule_value} characters.");
}
break;
case 'max':
if(strlen($value) > $rule_value){
$this->addError("{$item} must be a maximum of {$rule_value} characters.");
}
break;
case 'matches':
if($value != $data[$rule_value]){
$this->addError("{$rule_value} must match {$item}");
}
break;
case 'unique':
$check = $this->_db->get($rule_value, array($item, '=', $value));
if($check->count()){
$this->addError("{$item} already exists.");
}
break;
case 'email':
if(!filter_var($value, FILTER_VALIDATE_EMAIL)) {
$this->addError("{$item} is not a valid email.");
}
break;
case 'num':
if(!is_numeric($value)){
$this->addError("{$item} can only contain numbers.");
}
break;
case 'alpha':
if(!ctype_alpha($value))
{
$this->addError("{$item} can only contain letters.");
}
break;
}
}
}
}
}
public function check($data, $items = array()){
foreach($items as $item => $rules){
foreach($rules as $rule => $rule_value){
trim($value = $data[$item]);
$item = escape($item);
if($rule === 'required' && empty($value)){
$this->addError("{$rules['name']} is required");
}
else if(!empty($value)){
switch($rule){
case 'min':
if(strlen($value) < $rule_value){
$this->addError("{$item} must be a minimum of {$rule_value} characters.");
}
break;
case 'max':
if(strlen($value) > $rule_value){
$this->addError("{$item} must be a maximum of {$rule_value} characters.");
}
break;
case 'matches':
if($value != $data[$rule_value]){
$this->addError("{$rule_value} must match {$item}");
}
break;
case 'unique':
$check = $this->_db->get($rule_value, array($item, '=', $value));
if($check->count()){
$this->addError("{$item} already exists.");
}
break;
case 'email':
if(!filter_var($value, FILTER_VALIDATE_EMAIL)) {
$this->addError("{$item} is not a valid email.");
}
break;
case 'num':
if(!is_numeric($value)){
$this->addError("{$item} can only contain numbers.");
}
break;
case 'alpha':
if(!ctype_alpha($value))
{
$this->addError("{$item} can only contain letters.");
}
break;
}
}
}
}