比如说:$str="abcadef";
$strone=$str[0];
for($i=0;$i<strlen($str);$i++){
if($strone==$str[$i]){
$str[$i]="";
}
}
var_dump($str);
显示出:string(7) "bcdef";请问一下,为什么这个字符串还是7个长度,有没有什么办法,让他变成5个的长度,

解决方案 »

  1.   

    $str="abcadef";
    $strone=$str[0];
    $r = '';
    for($i=0;$i<strlen($str);$i++){
      if($strone != $str[$i]){
        $r .= $str[$i];
      }
    }
    $str = $r;
    var_dump($str);
      

  2.   

    var_dump (str_replace('a','',$str));
      

  3.   

    解决方法楼上各位都说了,但为了避免你重蹈覆辙,说说理论的事——程序看上去是“合理”的,但实际上是错误的,关键在于php核心存储变量的方式php对于一个字符串变量赋值后是记录了长度的,要改变这个长度需要重新赋值
    $str[x]='' 这种形式并不能对字符串变量重新赋值,因为''属于空字节,只能用于空字符串
    替换一个非空字节则是可行的
    具体请参考  深入理解php内核
      

  4.   

    呃,又快手写错了,sorry上面说的是空字节也计算在内了
      

  5.   

    google了一下参考这个:
    http://www.php-internal.com/book/?p=chapt03/03-01-00-variables-structure
      

  6.   

    本帖最后由 xuzuning 于 2012-11-26 15:21:30 编辑