Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

String as Array Values that will be sent in function that accept as array

Tags:

arrays

php

I have this method called validate() that accepts array as parameter.

E.g.

$v->validate([
    'username' => [$username, 'required'],
    'email'    => [$email, 'required'],
    'password' => [$password, 'required'],
]);

So what I want to do is, create dynamically parameters for that. Don't know the right term though. For example!

$v->validate([
    'username' => [$username, 'required'],
    'email'    => [$email, 'required'],
    'password' => [$password, 'required'],            
    $validate_parameters
]);

Something like that, there's this fixed fields and other dynamic fields that will be sent as a parameter. It will be translated as:

$v->validate([
    'username'       => [$username, 'required'],
    'email'          => [$email, 'required'],
    'password'       => [$password, 'required'],
    'dynamicfield_1' => ['value_1', 'rule_1'],
    'dynamicfield_2' => ['value_2', 'rule_2'],
    'dynamicfield_3' => ['value_3', 'rule_3'],
]);

Here's my method for that.

public function validateDynamicFields($compressed_field, $rules) {

    $parameters = '';

    foreach ($compressed_field as $key => $value) {

        // Well technically this will not work since it's not even an array or some sort.
        $parameters .= $key => [$value, $rules];

        // I even tried this and hope that it would work but it doesn't
        // $parameters .= "'{$key}' => [{$value}, '{$rules}'],";

    }

    return $parameters;
}

The question is, how do I create dynamically array values for the validate() method?

like image 519
Wesley Brian Lachenal Avatar asked Jun 30 '26 02:06

Wesley Brian Lachenal


2 Answers

You can use array_merge:

$v->validate(array_merge(
    [
      'username' => [$username, 'required'],
      'email'    => [$email, 'required'],
      'password' => [$password, 'required']
    ],
    $validate_parameters
));
like image 150
Mihai Matei Avatar answered Jul 02 '26 19:07

Mihai Matei


Im not sure what you are trying to accomplish, but maybe something like this: It creates both arrays separately, then merges them

$staticFields = [
    'username' => [$username, 'required'],
    'email'    => [$email, 'required'],
    'password' => [$password, 'required']
];

//this can be assigned with your DynamicFields function
$dynamicFields =  [
    'dynamicfield_1' => ['value_1', 'rule_1'],
    'dynamicfield_2' => ['value_2', 'rule_2'],
    'dynamicfield_3' => ['value_3', 'rule_3']
];

//merge both arrays, and pass them
$v->validate(array_merge($staticFields, $dynamicFields));
like image 28
BobbyTables Avatar answered Jul 02 '26 17:07

BobbyTables