1

アカウント番号を正常に表示するループがあります。これらの番号の一部は、先頭に「@」を付けてデータベースに保存されました。表示された結果から「@」記号を削除したいと思います。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

これは簡単だと思いますが、うまくいくものは見つかりません。ご協力いただきありがとうございます。

4

3 に答える 3

6

ループtrim()内で使用できないと考える理由がわかりません。for

<?php     
    for($x=0; $x < mysql_num_rows($result); $x++) {
        $out = ltrim($banner_id[$x], '@');
        echo "<li>$out</li>\n";
    }
?>
于 2012-05-24T15:38:36.937 に答える
3
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
于 2012-05-24T15:38:13.810 に答える
0

使ってみましたecho "<li>".ltrim($banner_id[$x], '@')."</li>\n";か?

于 2012-05-24T15:38:53.300 に答える