0

I have 2 arrays and i want to create an output array.

Example array requirements for Title and Subtitle field:

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

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

)

Post array after post s:

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

Example Output array:

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

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

)

How can i generate such array by a foreach loop?

This is what i have, but it wont work well. If i leave title blank and subtitle 1 character he gives back 2 times this field is required. It looks like he duplicated.

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

}
2
  • 1
    What do yoy have so far ? Where are you blocked ? Commented May 19, 2013 at 12:30
  • see above Lepidosteus. Commented May 19, 2013 at 12:32

1 Answer 1

2

Here you go:

<?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];
    }

Should be pretty self explanatory if you read over it.

Result:

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
        )

)
2
  • Thanks, but how to check the $posts? Commented May 19, 2013 at 12:53
  • Thanks, thats the solution for me! Commented May 19, 2013 at 13:06

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.