我有一个成功显示帐号的循环。其中一些数字被保存到数据库中,前面加上"@"。我想从显示的结果中删除"@"符号。我已经看到了很多简单回显的解决方案,通过使用trim
、preg_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_replace
比trim
慢得多,trim
比ltrim
略快。
我的测试代码:
<?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";
吗?