比较array php foreach循环

时间:2013-05-19 12:25:00

标签: php arrays foreach compare

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

Title和Subtitle字段的示例数组要求:

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

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

)

发布后发布数组:

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 . '';
    }
}

}

1 个答案:

答案 0 :(得分: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
        )

)