0

我有 2 个数组,我想创建一个输出数组。

标题和副标题字段的示例数组要求:

Array
(
[title] => Array
    (
        [required] => 1
        [minLength] => 2
        [maxLength] => 50
    )

[subtitle] => Array
    (
        [required] => 1
        [minLength] => 2
        [maxLength] => 55
    )

)

post 后的数组:

Array
(
    [title] => 
    [subtitle] => s
)

示例输出数组:

Array
(
[title] => Array
    (
        [0] => this field is required
        [1] => must be longer than 2
    )

[subtitle] => Array
    (            
        [0] => must be longer than 2
    )

)

如何通过 foreach 循环生成这样的数组?

这就是我所拥有的,但它不会很好地工作。如果我将标题留空且副标题 1 个字符,他会返回 2 次此字段是必需的。看起来他重复了。

class Forms_FormValidationFields {

private $_required;
private $_minLength;
private $_maxLength;
private $_alphaNumeric;
public $_errors;

public function __construct($validate, $posts) {

    array_pop($posts);
    $posts = array_slice($posts,1);

    foreach ( $posts as $postName => $postValue) {
        foreach( $validate[$postName] as $key => $ruleValue ){
            $set = 'set'.ucfirst($key);
            $get = 'get'.ucfirst($key);

            $this->$set( $postValue , $ruleValue);
            if( $this->$get() != '' || $this->$get() != NULL) {
                $test[$postName][] .= $this->$get();
            }
        }            
    }

    $this->_errors = $test;
}
public function setValidation(){
    return $this->_errors;
}
public function getRequired() {
    return $this->_required;
}

public function setRequired($value, $ruleValue) {
    if (empty($value) && $ruleValue == TRUE) {
        $this->_required = 'this field is required';
    }
}

public function getMinLength() {
    return $this->_minLength;
}

public function setMinLength($value, $ruleValue) {
    if (strlen($value) < $ruleValue) {
        $this->_minLength = ' must be longer than' . $ruleValue . '';
    }
}

public function getMaxLength() {
    return $this->_maxLength;
}

public function setMaxLength($value, $ruleValue) {
    if (strlen($value) > $ruleValue) {
        $this->_maxLength = 'must be shorter than' . $ruleValue . '';
    }
}

}
4

1 回答 1

2

干得好:

<?php
    $required = array(
        'This field is not required',
        'This field is required'
    );

    $length = 'Requires more than {less} but less than {more}';

    $needs = array(
        'title' => array(
            'required' => 1,
            'minLength' => 2,
            'maxLength' => 50,
        ),

        'subtitle' => array(
            'required' => 1,
            'minLength' => 2,
            'maxLength' => 55
        )
    );

    $new_needs = array();

    foreach($needs as $key => $value) // Loop over your array
    {
        $new_needs[$key][] = $required[$value['required']];
        $new_needs[$key][] = str_replace(
            array('{more}', '{less}'),
            array($value['maxLength'], $value['minLength']),
            $length
        );
    }

    foreach($_POST as $key => $value)
    {
        if(empty($value)) { echo $new_needs[$key][0]; }

        if(strlen($value) > $needs[$key]['maxLength'] || strlen($value) < $needs[$key]['minLength']) echo $new_needs[$key][1];
    }

如果你仔细阅读它应该是非常自我解释的。

结果:

Array
(
    [title] => Array
        (
            [0] => This field is required
            [1] => Requires more than 2 but less than 50
        )

    [subtitle] => Array
        (
            [0] => This field is required
            [1] => Requires more than 2 but less than 55
        )

)
于 2013-05-19T12:45:16.570 回答