我正在构建一个计数器,用于计算并在网页上显示某个目录中的图像数量。
我目前使用的代码是:
<?
$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代码进行了一些修改,但到目前为止还没有任何工作。任何帮助将不胜感激!
答案 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;
?>
通过尽可能短的方式来完成您的解决方案,有点乐趣。 :)