这是一种什么情况!!!

颓势不减 2012-11-26 02:30:01
比如说:

$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个的长度,


...全文
103 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2012-11-26
  • 打赏
  • 举报
回复
首先,执行你的代码得到
string 'bcdef' (length=7)
而不是
string(7) "bcdef";
当然这可能是我使用了 xdebug 的原因

你有 $str[$i]=""; 即将 $str 的 $i 字节置为空,所以这个字节依然存在,只是值为 chr(0)
这一点在我的输出结果中就看的很清楚了, chr(0) 转换成HTNL实体就是

空字符显示了,但你看不到。所以你只看到 bcdef 而没看到原来 a 位置上的空字符
空字符也是字符,当然也要占着位置。所以长度依然是 7
ImN1 2012-11-26
  • 打赏
  • 举报
回复
google了一下 参考这个: http://www.php-internal.com/book/?p=chapt03/03-01-00-variables-structure
ImN1 2012-11-26
  • 打赏
  • 举报
回复
呃,又快手写错了,sorry 上面说的是空字节也计算在内了
ImN1 2012-11-26
  • 打赏
  • 举报
回复
解决方法楼上各位都说了,但为了避免你重蹈覆辙,说说理论的事—— 程序看上去是“合理”的,但实际上是错误的,关键在于php核心存储变量的方式 php对于一个字符串变量赋值后是记录了长度的,要改变这个长度需要重新赋值 $str[x]='' 这种形式并不能对字符串变量重新赋值,因为''属于空字节,只能用于空字符串 替换一个非空字节则是可行的 具体请参考 深入理解php内核
颓势不减 2012-11-26
  • 打赏
  • 举报
回复
版主: 你就不解释一下为什么会出现7个长度么,你让我这30分如何才能诚心给你
ayzen1988 2012-11-26
  • 打赏
  • 举报
回复
var_dump (str_replace('a','',$str));
xuzuning 2012-11-26
  • 打赏
  • 举报
回复
$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);

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧