foreach($str as $key=>$row)
     {
   if(preg_match_all('/\b[Nn][Ss][Kk]-\w{5}/',$sn,$match)){
       $str[$key]['darfon_pn']=substr_replace($match[0][0],$row['darfon_pn'],7,2);
   }else{
   $str[$key]['darfon_pn'] = '';
   }
         }
以上代码只遍历了$match[0][0],如何才能遍历整个$match每个值

解决方案 »

  1.   

    $str[$key]['darfon_pn']=substr_replace($match[$key][0],$row['darfon_pn'],7,2);
      

  2.   

    $str[$key]['darfon_pn']=substr_replace($match[0][$key],$row['darfon_pn'],7,2);
      

  3.   

    if(preg_match_all('/\b[Nn][Ss][Kk]-\w{5}/',$sn,$match)) { //由于$sn是另外的变量,没有必要放在循环里多次检查
      foreach($match[0] as $v) { //对于每一个匹配到的串
        foreach($str as $key=>$row) { //修改$str
          $str[$key]['darfon_pn'] = substr_replace($v, $row['darfon_pn'],7,2);
        }
      }
    }else{ //否则
      foreach($str as $key=>$row) {
        $str[$key]['darfon_pn'] = ''; //赋空值
      }
    }
      

  4.   

    这样基本上是对的了,只是为何输出只替换了第一个循环到的字符串,其他都是删除了,例:NSK-34582 NSK-UUS89 NSK-89234,输出为NSK-892NSK-UUSNSK-345PP,我想要的是NSK-892PPNSK-UUSPPNSK-345PP
      

  5.   

    最初的 $str[$key]['darfon_pn'] 的内容是什么?
    测试代码$sn = 'NSK-34582 NSK-UUS89 NSK-89234';
    preg_match_all('/\b[Nn][Ss][Kk]-\w{5}/',$sn,$match);
    print_r($match[0]);
    $str = '________';
    foreach($match[0] as $v) {
      $str = substr_replace($v, $str,7,2);
      echo $str,PHP_EOL;
    }
    Array
    (
        [0] => NSK-34582
        [1] => NSK-UUS89
        [2] => NSK-89234
    )
    NSK-345________
    NSK-UUSNSK-345________
    NSK-892NSK-UUSNSK-345________是你期望的吗?
      

  6.   

    NSK-345________
    NSK-UUS________
    NSK-892________
    这个是我期望的
      

  7.   

    NSK-345________
    NSK-UUS________
    NSK-892________
    这个是我期望的
    这样呢?function actionTest(){

    $sn = 'NSK-34582 NSK-UUS89 NSK-89234';
    preg_match_all('/\b[Nn][Ss][Kk]-\w{5}/',$sn,$match);
    print_r($match[0]);
    $str = '________';
    foreach($match[0] as $v) {
    $key = substr_replace($v, $str,7);
    echo $key;
    }

    }
      

  8.   

    明白你的意思了preg_match_all('/\b[Nn][Ss][Kk]-\w{5}/',$sn,$match);
    foreach($str as $key=>$row)
    {
      if($match[0][0]){
        $str[$key]['darfon_pn']=substr_replace($match[0][0],$row['darfon_pn'],7,2);
        array_shift($match[0]);
      }else{
        $str[$key]['darfon_pn'] = '';
      }
    }无论 $str 有多少项,按匹配出的结果逐一替换,用完了就赋空值