PHP多维数组重复输出

PHP多维数组重复输出,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,下面的代码循环遍历用户提交数据的一系列需求(在本例中是来自注册表),并输出重复的错误消息。如何停止重复信息 if(!empty($_POST)){ $validate = array( 'username' => array( 'required' => true, 'min' => 3, 'max' => 20, 'unique' => 'users'

下面的代码循环遍历用户提交数据的一系列需求(在本例中是来自注册表),并输出重复的错误消息。如何停止重复信息

if(!empty($_POST)){
$validate = array(
    'username' => array(
            'required' => true,
            'min' => 3,
            'max' => 20,
            'unique' => 'users'
    ),
    'password' => array(
            'required' => true,
            'min' => 6
    ),
    'password_confirm' => array(
            'required' => true,
            'matches' => 'password'
    )
);

foreach($validate as $item => $rules) 
{
    foreach($rules as $rule => $rule_value) 
    {
        $value = $_POST[$item];
        $item = htmlentities($item, ENT_QUOTES, 'UTF-8', false);

        if($rule === 'required' && empty($value))
        {
            $errors[] = "{$item} is required <br>";
        } 
    }

    if(!empty($errors))
    {
        foreach($errors as $error)
        {
            echo $error;
        }
    }
    else 
    {
        echo 'Registration Successful <br>';
    }
}}
if(!empty($\u POST)){
$validate=数组(
“用户名”=>数组(
“必需”=>true,
“min”=>3,
“最大值”=>20,
“唯一”=>“用户”
),
“密码”=>数组(
“必需”=>true,
“min”=>6
),
“密码\u确认”=>数组(
“必需”=>true,
'匹配'=>'密码'
)
);
foreach($validate as$item=>$rules)
{
foreach($rules as$rule=>$rule\u值)
{
$value=$_POST[$item];
$item=htmlentities($item,entu引号,'UTF-8',false);
如果($rule=='required'&&empty($value))
{
$errors[]=“{$item}是必需的
”; } } 如果(!empty($errors)) { foreach($errors作为$error) { echo$错误; } } 其他的 { echo“注册成功
”; } }}
输出:

用户名是必需的
用户名是必需的
需要密码
用户名是必需的
需要密码
需要密码确认


你的循环有点混乱

foreach($validate as $item => $rules) 
{
    foreach($rules as $rule => $rule_value) 
    {
        $value = $_POST[$item];
        $item = htmlentities($item, ENT_QUOTES, 'UTF-8', false);

        if($rule === 'required' && empty($value))
        {
            $errors[] = "{$item} is required <br>";
        } 
    }
}

// This piece that prints out the errors (if they are present) needs
// to be moved outside the loop that creates the error array.
if(!empty($errors))
{
    foreach($errors as $error)
    {
        echo $error;
    }
}
else 
{
    echo 'Registration Successful <br>';
}
foreach($validate as$item=>$rules)
{
foreach($rules as$rule=>$rule\u值)
{
$value=$_POST[$item];
$item=htmlentities($item,entu引号,'UTF-8',false);
如果($rule=='required'&&empty($value))
{
$errors[]=“{$item}是必需的
”; } } } //这件打印出错误(如果存在)的作品需要 //移动到创建错误数组的循环之外。 如果(!empty($errors)) { foreach($errors作为$error) { echo$错误; } } 其他的 { echo“注册成功
”; }
此外,您可能为了提问而简化了这段代码,但如果这就是它的全部内容,为什么不在找到错误时打印它,而不是将其附加到错误数组中呢?这样你只需要循环一次。您可以使用布尔值查看是否存在错误

$has_errors = false;
foreach($validate as $item => $rules) 
{
    foreach($rules as $rule => $rule_value) 
    {
        $value = $_POST[$item];
        $item = htmlentities($item, ENT_QUOTES, 'UTF-8', false);

        if($rule === 'required' && empty($value))
        {
            $has_errors = true;
            echo "{$item} is required <br>";
        } 
    }
}
if (!$has_errors) echo 'Registration Successful <br>';
$has_errors=false;
foreach($validate as$item=>$rules)
{
foreach($rules as$rule=>$rule\u值)
{
$value=$_POST[$item];
$item=htmlentities($item,entu引号,'UTF-8',false);
如果($rule=='required'&&empty($value))
{
$has_errors=true;
echo“{$item}是必需的
”; } } } 如果(!$has_errors)回显“注册成功
”;
谢谢你。工作完美。是的,为了便于阅读,我减少了一些内容。