我需要根据变量名从关联数组中删除所有元素

时间:2017-06-19 15:16:59

标签: php arrays associative-array

我正在阅读用户的输入(在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,则必须删除。有什么方法可以解决这个问题吗?

感谢您的帮助。

0 个答案:

没有答案