在 php 'for' 循环/mysql 查询中去除字符


Strip character in a php 'for' loop/mysql query

我有一个成功显示帐号的循环。其中一些数字被保存到数据库中,前面加上"@"。我想从显示的结果中删除"@"符号。我已经看到了很多简单回显的解决方案,通过使用trimpreg_replace等来实现这一点,但在for循环中没有任何解决方案。有什么想法吗?

我当前的代码(不包括尝试的解决方案):

<?php
$query = sprintf("SELECT banner_id FROM tablename") or die(mysql_error());
$result = mysql_query($query, $dblink) or die(mysql_error());
$i = 0;
if($result){
  while($row = mysql_fetch_array($result)){
    $banner_id[$i] = $row['banner_id'];
    $i++;
  }
}
?>
<html><body>
<ul>
<?php     
    for($x=0; $x < mysql_num_rows($result); $x++) {
        echo "<li>{$banner_id[$x]}</li>'n";
    }
?>
</ul>
</body></html>

电流输出:

  • 12345678
  • @98765432
  • @01230145

期望输出:

  • 12345678
  • 98765432
  • 01230145

我觉得这应该很容易,但我找不到任何有效的东西。感谢您提供的任何帮助!

我不明白为什么你认为你不能在for循环中使用trim()

<?php     
    for($x=0; $x < mysql_num_rows($result); $x++) {
        $out = ltrim($banner_id[$x], '@');
        echo "<li>$out</li>'n";
    }
?>
while($row = mysql_fetch_array($result)){
    $banner_id[$i] = trim( $row['banner_id'], '@' );
    $i++;
}

您发现在打印过程中可以执行的任何操作也可能在打印之前发生。不过,我会避免在这样的简单替换中使用preg_*函数。


编辑:看到其他评论后,我意识到str_replacetrim慢得多,trimltrim略快。

我的测试代码:

<?php
$start = microtime(true);
for($i = 0; $i < 1000000; $i++)
{
    $test = '@123345567';
    $test = str_replace('@', '', $test);
}
$time = microtime(true) - $start;
print "str_replace(): $time";
$start = microtime(true);
for($i = 0; $i < 1000000; $i++)
{
    $test = '@123345567';
    $test = trim($test, '@');
}
$time = microtime(true) - $start;
print "<br/>trim(): $time";
$start = microtime(true);
for($i = 0; $i < 1000000; $i++)
{
    $test = '@123345567';
    $test = ltrim($test, '@');
}
$time = microtime(true) - $start;
print "<br />ltrim(): $time";

一些结果:

str_replace(): 0.64844393730164
trim(): 0.50381588935852
ltrim(): 0.51557087898254
str_replace(): 0.65361404418945
trim(): 0.49786400794983
ltrim(): 0.51703000068665
str_replace(): 0.64999985694885
trim(): 0.49114680290222
ltrim(): 0.5248019695282

你试过使用echo "<li>".ltrim($banner_id[$x], '@')."</li>'n";吗?