0

我正在构建一个计数器,用于计算并在网页上显示某个目录中的图像数量。

我目前使用的代码是这样的:

<?
    $d = opendir("images/myimagefolder");
$count = 0;
     $min_digits = 7;
while(($f = readdir($d)) !== false)
  if(ereg('.jpg$', $f))
     ++$count;
closedir($d);
 if ($min_digits)
{
  $count = sprintf('%0'.$min_digits.'f', $count);
}

$number = $count;
$formattedNumber = sprintf("%07d", $number);
$formattedNumber = str_split($formattedNumber, 3);
$formattedNumber = implode(",", $formattedNumber);

  print "$formattedNumber";
?>

这很好用并输出如下数字:000,000,5

我想要的是让分隔逗号从右边而不是左边每隔 3 位出现一次,所以它会显示为 0,000,005

这将如何完成?

我已经尝试对我的 sprintf 和 str_split 代码进行一些修改,但到目前为止没有任何效果。任何帮助将不胜感激!

4

4 回答 4

0
$formattedNumber = sprintf("%07d", $number);
$formattedNumber = str_split(strrev($formattedNumber), 3);
for (i=0;i<count($formattedNumber); i++)
    $formattedNumber[i] = strrev($formattedNumber[i]);
$formattedNumber = implode(",", array_reverse($formattedNumber));
于 2012-08-03T05:56:49.997 回答
0

删除最后四行。您只需要'打印 number_format ($count);'

http://php.net/manual/en/function.number-format.php

编辑,以上内容不适用于前导 0

我在 php 网站的评论中发现了这一点。一点正则表达式魔术应该在一行中完成。

print preg_replace("/(?<=\d)(?=(\d{3})+(?!\d))/",",",$count);
于 2012-08-03T05:59:19.727 回答
0

这是我对数组的看法:

$num    = sprintf("%07d", 5);
$digits = str_split($num, 1);
$digits = array_reverse($digits);
$chunks = array_map('array_reverse', array_reverse(array_chunk($digits, 3)));

$concat_chunks = array();
foreach ($chunks as $chunk) {
    $concat_chunks[] = join('', $chunk);
}

$output = join(',', $concat_chunks);
print $output;
于 2012-08-03T06:03:12.757 回答
0
<?php

//image count
$images=count(glob("images/myimagefolder/*.jpg"));

//padding
$images=sprintf("%07s",$images);

//commas
$images=strrev(implode(",",str_split(strrev($images),3)));

//outputs 0,000,005
echo $images;

?>

想出最短的方法来完成您的解决方案,这很有趣。:)

于 2012-08-03T06:05:19.900 回答