我正在阅读用户的输入(在Laravel中)并且具有与每个输入相关联的规则。如果用户选中一个复选框(针对该特定表),我想从该表的$ rules关联数组中删除所有规则。
为了更好地说明,我创建了两个模仿行为的数组。
我的输入数组如下:
$input = array("TB1_course" => ['0'=>'CHEM 1E03', '1'=>'ENG 1D04'
],
"TB1_section" => ['0'=>'CHEM 1E03', '1'=>'ENG 1D04'
],
"TB1_checkbox" => "1",
"TB2_course" => ['0'=>'CHEM 1E03', '1'=>'ENG 1D04'
],
"TB2_checkbox" => "0"
);
$rules= array(
'TB1_course.*' => 'required_with',
'TB1_section.*' =>'required_with',
'TB2_course.*' =>'required_with'
);
您可以从输入数组中看到TB1_checkbox的值为1.如果它的值为1,我想删除与TB1关联的所有规则(即使用包含&的键删除$ rules中的元素#39; TB1&#39)。
我试图这样做,并且部分成功。我的代码如下:
foreach ($input as $key=>$value){//go thru every element of the inputs
if ((strpos($key, 'checkbox')!==false) && $value==1){//if it contains 'checkbox'
//and checkbox is selected
$table_name= substr($key, 0,3);//name of table
//now go thru $rules and remove all elements which contain a word of $table_name
$rules=array_filter($rules, function($x){
return strpos($x, $table_name)!==0;//problem lies here
}, ARRAY_FILTER_USE_KEY);
}
}
但是我的代码不起作用。 strpos()函数无法读取$ table_name变量,并导致问题。如果我手动传入一个字符串,它最终会起作用(即' TB1'而不是$ table_name),但我必须具有检查所有表格的灵活性(所以包含' TB2&的规则#39;如果" TB2_checkbox"的值为1,则必须删除。有什么方法可以解决这个问题吗?
感谢您的帮助。