PHP - mb_strlen或strlen返回0,即使字符串的长度增长

时间:2014-06-01 23:37:17

标签: php string for-loop

这里对mb_strlen($ str,' utf-8')的引用不起作用。

<?php
  function listFolderFiles($dir,$str){
    $ffs = scandir($dir);
    $matches;
    foreach($ffs as $ff){
      preg_match('/(html)$/',$ff,$matches);
      if($ff != '.' && $ff != '..'){
        if(is_dir($dir.'/'.$ff)) {
          $str .= listFolderFiles($dir.'/'.$ff,$str);
        } else if(count($matches) > 0) {
          if (mb_strlen($str, 'utf-8') > 0) {
            $str .= ','.$dir.'/'.$ff;
          } else {
            $str .= $dir.'/'.$ff;
          }
        }
      }
    }
    return $str;
  }
  echo listFolderFiles('index','');
?>

当我回复mb_strlen($ str,&#39; utf-8)&#39;我得到了正确的长度。

我做错了什么?谢谢。

1 个答案:

答案 0 :(得分:0)

实际上,连接每次扫描新目录时导致字符串复制和连接的递归调用。所以我删除了$str .= listFolderFiles($dir.'/'.$ff,$str); - 并且已经修复了

<?php
  function listFolderFiles($dir,$str){
    $ffs = scandir($dir);
    $matches;
    foreach($ffs as $ff){
      preg_match('/(html)$/',$ff,$matches);
      if($ff != '.' && $ff != '..'){
        if(is_dir($dir.'/'.$ff)) {
          $str = listFolderFiles($dir.'/'.$ff,$str);
        } else if(count($matches) > 0) {
          if (strlen($str) == 0) {
            $str .= $dir.'/'.$ff;
          } else {
            $str .= ','.$dir.'/'.$ff;
          }
        }
      }
    }
    return $str;
  }
  echo listFolderFiles('index','');
?>