各位大神,帮我忙处理一下,这个问题搞好了久没有搞成
场面 《多维护数组的合并,及继承父无素的值》
意思就是,A数组做为参考标地,及B数组合并,如果A数组的子元素,在B数组里找不到,就把他的父系元素在B数组里查找,一起找到最顶层。
测试代码如下
<!DOCTYPE html>
<html>
<head>
<title>测试</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
<input type="text" name="info[name1][1]" value="info[name1][1]">
<input type="text" name="info[name1][2]" value="info[name1][2]">
<input type="text" name="info[]" value="info[]">
<input type="text" name="info[sex][low][]" value="info[sex][]">
<input type="text" name="info[sex][low][]" value="info[sex][]">
<input type="text" name="info[sex][]" value="info[sex][]">
<input type="text" name="info[sex][]" value="info[sex][]">
<input type="text" name="name" value="naem">
<input name="" type="submit" value="提交" />
</form>
</body>
</html>if(!empty($_POST))
{
var_dump($_POST);
$bb = array(
'info'=>array(
'rule'=>'require',
'msg'=>'必须填写',
'value'=>'默认值'
),
'info[sex][low]'=>array(
'rule'=>'require',
'msg'=>'必须填写',
'value'=>'默认值'
),
'info[sex][0]' => array(
'rule'=>'require|asd|ddd|',
'msg'=>'必须填写',
'value'=>'默认值',
),
'name' => array(
'rule'=>'require|asd|ddd|',
'msg'=>'必须填写',
'value'=>'默认值',
),
);
//var_dump(rule()['msg']);
//array_walk_recursive($_POST, 'test_print',$bb);}
说明,就是POST过的数组 跟BB数组组行合并,如例 info[name1][1] 这个元素 在BB这个数组里是找不到这个元素的,那就找 info[name1][1] 的父系元素 info[name1] 在BB这个数组里也是的不到的,那就在往上一层找他的父素 info,那在BB这个数组里是可以找到 info这个元素,那我们就把 BB里的 info元素跟_POST数组 info[name1][1] 进行合并,合并结果为
info[name1][1] = array(
'rule'=>'require',
'msg'=>'必须填写',
'value'=>empty( info[name1][1]) ? '默认值' : info[name1][1],)
大致的需求就是这样
场面 《多维护数组的合并,及继承父无素的值》
意思就是,A数组做为参考标地,及B数组合并,如果A数组的子元素,在B数组里找不到,就把他的父系元素在B数组里查找,一起找到最顶层。
测试代码如下
<!DOCTYPE html>
<html>
<head>
<title>测试</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
<input type="text" name="info[name1][1]" value="info[name1][1]">
<input type="text" name="info[name1][2]" value="info[name1][2]">
<input type="text" name="info[]" value="info[]">
<input type="text" name="info[sex][low][]" value="info[sex][]">
<input type="text" name="info[sex][low][]" value="info[sex][]">
<input type="text" name="info[sex][]" value="info[sex][]">
<input type="text" name="info[sex][]" value="info[sex][]">
<input type="text" name="name" value="naem">
<input name="" type="submit" value="提交" />
</form>
</body>
</html>if(!empty($_POST))
{
var_dump($_POST);
$bb = array(
'info'=>array(
'rule'=>'require',
'msg'=>'必须填写',
'value'=>'默认值'
),
'info[sex][low]'=>array(
'rule'=>'require',
'msg'=>'必须填写',
'value'=>'默认值'
),
'info[sex][0]' => array(
'rule'=>'require|asd|ddd|',
'msg'=>'必须填写',
'value'=>'默认值',
),
'name' => array(
'rule'=>'require|asd|ddd|',
'msg'=>'必须填写',
'value'=>'默认值',
),
);
//var_dump(rule()['msg']);
//array_walk_recursive($_POST, 'test_print',$bb);}
说明,就是POST过的数组 跟BB数组组行合并,如例 info[name1][1] 这个元素 在BB这个数组里是找不到这个元素的,那就找 info[name1][1] 的父系元素 info[name1] 在BB这个数组里也是的不到的,那就在往上一层找他的父素 info,那在BB这个数组里是可以找到 info这个元素,那我们就把 BB里的 info元素跟_POST数组 info[name1][1] 进行合并,合并结果为
info[name1][1] = array(
'rule'=>'require',
'msg'=>'必须填写',
'value'=>empty( info[name1][1]) ? '默认值' : info[name1][1],)
大致的需求就是这样
接收$_POST 我们封装一个函数分析里面的key值 如info[sub1][sub2][sub3]...
1,遍历$_POST -- 只取key值保存 0=>key1 1=>key2
2,吧info[sub1][sub2][sub3]...把每个数组分割成 array(0=>info 1=>info[sub1] 2=>info[sub1][sub2] ..)的形式 具体:explod('[',$key), 去除右侧的】 trim(,']')
3,foreach 每个数组 for($i=len($array),$i>=0,$i--) 从最小的键值开始比对 也就是先从nfo[sub1][sub2]比对 然后比对info[sub1]
4,如果array_key_exist(info[sub1],$bb)... //取出post中的值$_post[info[sub1]]合并 退出这个数组的循环 遍历下个数组
一个小小的表单,弄的那么复杂干什么?
你难为用户,用户就把腿跑路
主要是为了表单的验证,前端可以少些代码,规则的继承!
版主:我也常试过用array_walk_recursive() 但就是没有成功,我现在用你的这个array_merge_recursive()!
@xuzuning 关于这个验证规则的继承,你有没有更好的思路?
你看看能不能写一下实列,指点一下呢