PHP图像计数器编号格式

时间:2012-08-03 05:49:30

标签: php image counter number-formatting

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

我目前使用的代码是:

<?
    $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 个答案:

答案 0 :(得分: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));

答案 1 :(得分:0)

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

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

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

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

print preg_replace("/(?<=\d)(?=(\d{3})+(?!\d))/",",",$count);

答案 2 :(得分: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;

答案 3 :(得分: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;

?>

通过尽可能短的方式来完成您的解决方案,有点乐趣。 :)