已知一段文本: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)

解决方案 »

  1.   

    取数规则不明确!sortrule=后面共8行
    由 6对应AndFail,186,188
    可知序号是倒排的但与上面的对7、8的描述有冲突
      

  2.   

    //下面代码有的地方已将楼主的东西该了,不过提供给楼主个思路
    $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);
      

  3.   

    是的。取数不规则。strule=7,8,6,1,2,3,4,5,
    然后从“sortrule=”开始,每行与strule中的数字对应。我正为此事头痛!
      

  4.   

    我就奇怪了,我说的“取数规则不明确”是指你的描述有问题
    你自己怎么也这么说呢?你没有看明白人家的数据说明吧?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,
      

  5.   

    当然也可理解为
    结果集中的行取自 strule 对应列表示的数据集行
    这样结果就与上面的理解反过来了因为你要 排除掉 goodbin=1,2,3,4,5
    理解上的差异将各到相反的结果
      

  6.   

    我描述没问题啊。顺序对应:
    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,
      

  7.   

    本帖最后由 xuzuning 于 2010-07-30 17:12:42 编辑
      

  8.   

    <?php
    $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);
    ?>