已知一段文本:strule=7,8,6,1,2,3,4,5,
goodbin=1,2,3,4,5,
TEMP=110
XBinString=201,202,203,204,205,206, 0, 0,209, 0,211,211,211, 0, 0, 0, 0,218, 0, 0, 0,222,223,224,225, 0,227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,251,252,253,254,255,256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,271,272, 0, 0, 0, 0, 0, 0, 0,280,281,282,283,284,285, 0, 0,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303, 0, 0, 0, 0,308,309,310,311,312,313, 0,315,316,317,318,319,320, 0, 0,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342, 0, 0,345,346,347,348,349,350,351,352,353,354, 0, 0, 0,358,359,360,361, 0, 0,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381, 0, 0,384,385,386, 0,388, 0,390,
sortrule=
OrFail,1,2,3,4,5,6,
OrFail,9,22,23,24,25,51,52,53,54,55,56,71,72,11,12,13,82,83,84,85,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,141,142,80,81,
AndFail,186,188,
FT3,1,#AndPass,1,2,3,4,5,6,9,11,12,13,22,23,24,25,27,51,52,53,54,55,56,71,72,80,81,82,83,84,85,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,115,116,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,184,185,
FT3,1,#AndPass,1,2,3,4,5,6,9,11,12,13,22,23,24,25,27,51,52,53,54,55,56,71,72,80,81,82,83,84,85,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,115,116,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,180,181,
FT3,1,#AndPass,1,2,3,4,5,6,9,11,12,13,22,23,24,25,27,51,52,53,54,55,56,71,72,80,81,82,83,84,85,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,141,142,
FT3,1,#AndPass,1,2,3,4,5,6,9,11,12,13,22,23,24,25,51,52,53,54,55,56,71,72,80,81,82,83,84,85,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,115,116,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,180,181,
AndPass,1,2,3,4,5,6,9,11,12,13,22,23,24,25,51,52,53,54,55,56,71,72,80,81,82,83,84,85,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,141,142,其中strule中的项对应“sortrule=”的每一行。
如strule中的7对应OrFail,1,2,3,4,5,6,这行
strule中的8对应OrFail,9,22,23,24,25,51,52,53,54,55,56,71,72,11,12,13,82,83,84,85,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,141,142,80,81,这行
strule中的6对应AndFail,186,188,这行
现在已知goodbin=1,2,3,4,5, 求除去goodbin的strule对应的项。以数组形式输出,像这样:
7=>array([0]=>1 [1]=>2 [2]=>3 [3]=>4 [4]=>5 [5]=>6)
8=>array(...)
6=>array([0]=>186 [1]=>188)
goodbin=1,2,3,4,5,
TEMP=110
XBinString=201,202,203,204,205,206, 0, 0,209, 0,211,211,211, 0, 0, 0, 0,218, 0, 0, 0,222,223,224,225, 0,227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,251,252,253,254,255,256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,271,272, 0, 0, 0, 0, 0, 0, 0,280,281,282,283,284,285, 0, 0,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303, 0, 0, 0, 0,308,309,310,311,312,313, 0,315,316,317,318,319,320, 0, 0,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342, 0, 0,345,346,347,348,349,350,351,352,353,354, 0, 0, 0,358,359,360,361, 0, 0,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381, 0, 0,384,385,386, 0,388, 0,390,
sortrule=
OrFail,1,2,3,4,5,6,
OrFail,9,22,23,24,25,51,52,53,54,55,56,71,72,11,12,13,82,83,84,85,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,141,142,80,81,
AndFail,186,188,
FT3,1,#AndPass,1,2,3,4,5,6,9,11,12,13,22,23,24,25,27,51,52,53,54,55,56,71,72,80,81,82,83,84,85,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,115,116,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,184,185,
FT3,1,#AndPass,1,2,3,4,5,6,9,11,12,13,22,23,24,25,27,51,52,53,54,55,56,71,72,80,81,82,83,84,85,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,115,116,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,180,181,
FT3,1,#AndPass,1,2,3,4,5,6,9,11,12,13,22,23,24,25,27,51,52,53,54,55,56,71,72,80,81,82,83,84,85,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,141,142,
FT3,1,#AndPass,1,2,3,4,5,6,9,11,12,13,22,23,24,25,51,52,53,54,55,56,71,72,80,81,82,83,84,85,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,115,116,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,180,181,
AndPass,1,2,3,4,5,6,9,11,12,13,22,23,24,25,51,52,53,54,55,56,71,72,80,81,82,83,84,85,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,141,142,其中strule中的项对应“sortrule=”的每一行。
如strule中的7对应OrFail,1,2,3,4,5,6,这行
strule中的8对应OrFail,9,22,23,24,25,51,52,53,54,55,56,71,72,11,12,13,82,83,84,85,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,141,142,80,81,这行
strule中的6对应AndFail,186,188,这行
现在已知goodbin=1,2,3,4,5, 求除去goodbin的strule对应的项。以数组形式输出,像这样:
7=>array([0]=>1 [1]=>2 [2]=>3 [3]=>4 [4]=>5 [5]=>6)
8=>array(...)
6=>array([0]=>186 [1]=>188)
由 6对应AndFail,186,188
可知序号是倒排的但与上面的对7、8的描述有冲突
$strule = array(7,8,6,1,2,3,4,5);
$goodbin = array(1,2,3,4,5);$s = <<<s
OrFail,1,2,3,4,5,6,
OrFail,9,22,23,24,25,51,52,53,54,55,56,71,72,11,12,13,82,83,84,85,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,141,142,80,81,
AndFail,186,188,
FT3,1,#AndPass,1,2,3,4,5,6,9,11,12,13,22,23,24,25,27,51,52,53,54,55,56,71,72,80,81,82,83,84,85,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,115,116,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,184,185,
FT3,1,#AndPass,1,2,3,4,5,6,9,11,12,13,22,23,24,25,27,51,52,53,54,55,56,71,72,80,81,82,83,84,85,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,115,116,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,180,181,
FT3,1,#AndPass,1,2,3,4,5,6,9,11,12,13,22,23,24,25,27,51,52,53,54,55,56,71,72,80,81,82,83,84,85,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,141,142,
FT3,1,#AndPass,1,2,3,4,5,6,9,11,12,13,22,23,24,25,51,52,53,54,55,56,71,72,80,81,82,83,84,85,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,115,116,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,180,181,
AndPass,1,2,3,4,5,6,9,11,12,13,22,23,24,25,51,52,53,54,55,56,71,72,80,81,82,83,84,85,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,141,142,
s;
$arr = explode(chr(13), $s);//分割成数组
$num = count($strule);
$ar1 = array();
for($i = 0; $i < $num; $i++){//取出strule对应的数组
$ar1[$strule[$i]] = $arr[$i];
}
$num = count($goodbin);
$ar2 = array();
for($i = 0; $i < $num; $i++){//取出goodbin对应的数组
$ar2[$goodbin[$i]] = $arr[$i];
}
$a1 = array_diff_key($ar1, $ar2);//取出strule数组和goodbin数组不同的选项
$a2 = array_diff_key($ar2, $ar1);//取出goodbin数组和strule数组不同的选项
$arr = array_merge($a1, $a2);//合并剩余的选项到数组
echo '<pre>';print_r($arr);
然后从“sortrule=”开始,每行与strule中的数字对应。我正为此事头痛!
你自己怎么也这么说呢?你没有看明白人家的数据说明吧?7 OrFail,1,2,3,4,5,6,
8 OrFail,9,22,23,24,25,51,52,53,54,55...
6 AndFail,186,188,对于 strule=7,8,6,1,2,3,4,5,
我的理解:这是有效数据的取出顺序,即取出的是按下面顺序的数据
FT3,1,#AndPass,1,2,3,4,5,6,9,11,12,13,...
FT3,1,#AndPass,1,2,3,4,5,6,9,11,,127,128,129,130,131,132,133,134...
FT3,1,#AndPass,1,2,3,4,5,6,9,11,,102,103,141,142,...
FT3,1,#AndPass,1,2,3,4,5,6,9,11,85,88,89,90,91,92,93,94,95,960,141,142,180,181,...
AndPass,1,2,3,4,5,6,9,11,12,13,22...
AndFail,186,188,..
OrFail,9,22,23,24,25,51,52,53,54,55,56...
OrFail,1,2,3,4,5,6,
结果集中的行取自 strule 对应列表示的数据集行
这样结果就与上面的理解反过来了因为你要 排除掉 goodbin=1,2,3,4,5
理解上的差异将各到相反的结果
strule=7,8,6,1,2,3,4,5,
依次与strule=后的行对应。
7=>OrFail,1,2,3,4,5,6,
8=>OrFail,9,22,23,24,25,51,52,53,54,55,56,71,72,11,12,13,82,83,84,85,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,141,142,80,81,
6=>AndFail,186,188,
1=>FT3,1,#AndPass,1,2,3,4,5,6,9,11,12,13,22,23,24,25,27,51,52,53,54,55,56,71,72,80,81,82,83,84,85,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,115,116,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,184,185,
2=>FT3,1,#AndPass,1,2,3,4,5,6,9,11,12,13,22,23,24,25,27,51,52,53,54,55,56,71,72,80,81,82,83,84,85,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,115,116,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,180,181,
3=>FT3,1,#AndPass,1,2,3,4,5,6,9,11,12,13,22,23,24,25,27,51,52,53,54,55,56,71,72,80,81,82,83,84,85,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,141,142,
4=>FT3,1,#AndPass,1,2,3,4,5,6,9,11,12,13,22,23,24,25,51,52,53,54,55,56,71,72,80,81,82,83,84,85,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,115,116,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,180,181,
5=>AndPass,1,2,3,4,5,6,9,11,12,13,22,23,24,25,51,52,53,54,55,56,71,72,80,81,82,83,84,85,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,141,142,
$str = 'strule=7,8,6,1,2,3,4,5,
goodbin=1,2,3,4,5,
TEMP=110
XBinString=201,202,203,204,205,206, 0, 0,209, 0,211,211,211, 0, 0, 0, 0,218, 0, 0, 0,222,223,224,225, 0,227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,251,252,253,254,255,256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,271,272, 0, 0, 0, 0, 0, 0, 0,280,281,282,283,284,285, 0, 0,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303, 0, 0, 0, 0,308,309,310,311,312,313, 0,315,316,317,318,319,320, 0, 0,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342, 0, 0,345,346,347,348,349,350,351,352,353,354, 0, 0, 0,358,359,360,361, 0, 0,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381, 0, 0,384,385,386, 0,388, 0,390,
sortrule=
OrFail,1,2,3,4,5,6,
OrFail,9,22,23,24,25,51,52,53,54,55,56,71,72,11,12,13,82,83,84,85,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,141,142,80,81,
AndFail,186,188,
FT3,1,#AndPass,1,2,3,4,5,6,9,11,12,13,22,23,24,25,27,51,52,53,54,55,56,71,72,80,81,82,83,84,85,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,115,116,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,184,185,
FT3,1,#AndPass,1,2,3,4,5,6,9,11,12,13,22,23,24,25,27,51,52,53,54,55,56,71,72,80,81,82,83,84,85,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,115,116,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,180,181,
FT3,1,#AndPass,1,2,3,4,5,6,9,11,12,13,22,23,24,25,27,51,52,53,54,55,56,71,72,80,81,82,83,84,85,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,141,142,
FT3,1,#AndPass,1,2,3,4,5,6,9,11,12,13,22,23,24,25,51,52,53,54,55,56,71,72,80,81,82,83,84,85,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,115,116,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,180,181,
AndPass,1,2,3,4,5,6,9,11,12,13,22,23,24,25,51,52,53,54,55,56,71,72,80,81,82,83,84,85,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,141,142,
';
preg_match('/(?<=strule=).+(?=,\s)/',$str,$m);
$strule = explode(',',$m[0]);
preg_match('/(?<=goodbin=).+(?=,\s)/',$str,$m);
$goodbin = explode(',',$m[0]);
preg_match('/sortrule=\s+(.+)\s+$/s',$str,$m);
$sortrule = explode("\n",$m[1]);
$strule_arr = array_combine($strule,$sortrule);
$strule_arr = array_diff_key($strule_arr,array_flip($goodbin));
array_walk($strule_arr,'fun');
function fun(&$item,$key) {
$item = explode(',',preg_replace('/\w+,(.*),/','$1',$item));
}
print_r($strule_arr);
?>