Установить ключ ассоциативного массива
Рассмотрим этот массив:
protected $filter = [
'preco' => 'required;double(1,4)',
'email' => 'required;email'
];
Шаг, foreach:
protected function bootFilterPost() {
foreach ($this->filter as $key => $value):
$this->postRules[$key] = preg_split('/(;)/', $value);
endforeach;
var_dump($this->postRules);
}
И у меня есть этот выход:
array(2) {
["preco"]=>
array(2) {
[0]=>
string(8) "required"
[1]=>
string(11) "double(1,4)"
}
["email"]=>
array(2) {
[0]=>
string(8) "required"
[1]=>
string(5) "email"
}
}
, Но должен выйти, таким образом:
array(2) {
["preco"]=>
array(2) {
["required"]=>
string(8) "true"
["double"]=>
string(11) "1,4"
}
["email"]=>
array(2) {
["required"]=>
string(8) "true"
["email"]=>
string(5) "true"
}
}
то есть, нужно, чтобы значения были введены, такие как ключи и данные значение в string ("true") или booleam(true);
1
Author: Cleber Martins, 2017-10-05
1 answers
Несмотря на то, что не прописываете правила, что все интересовали, так как проверок Laravel достаточно полной и позволяют на многие другие вещи, которые мы не упомянули, таких как, unique
, min
, max
, digits
, etc... представляю вам возможное решение.
Это использует вспомогательный массив для сопоставления значений:
private $regras = [
"required"=>true,
"email"=>true
];
Если значение рассматривается при этом массиве сопоставление применяется напрямую, в противном случае пытается увидеть, если значение имеет некоторые разделение по (
double(1,4)
Или разделения :
digits:3
, Сделав их толкование и применение.
Например:
protected function bootFilterPost() {
foreach ($this->filter as $key => $value):
$arr = preg_split('/(;)/', $value);
foreach ($arr as $a): //ver cada regra de validação do campo
//ver se é um que faz parte do array de regras
if (array_key_exists ($a, $this->regras)):
$this->postRules[$key][$a] = $this->regras[$a];
elseif (strpos($a, "(") !== false): //ver se tem (
$split = explode("(", $a); //dividir pelo (
$this->postRules[$key][$split[0]] = "(" . $split[1];
elseif (strpos($a, ":") !== false): //ver se tem :
$split = explode(":", $a); //dividir pelo :
$this->postRules[$key][$split[0]] = $split[1];
endif;
endforeach;
endforeach;
var_dump($this->postRules);
}
1
Author: Isac, 2017-10-05 17:06:14