我有alexa功能并返回alexa排名。我想在每三位数字中加上逗号。
例如:1,500,500
我曾尝试使用number_format(),但它不适用于我。这是函数
<?php
/**
* Get Popularity Text of a Domain via Alexa XML Data
*
* @return string|FALSE text or FALSE on error
*/
function alexa_get_rank($domain)
{
$alexa = "http://data.alexa.com/data?cli=10&dat=s&url=%s";
$request_url = sprintf($alexa, urlencode($domain));
$xml = simplexml_load_file($request_url);
if (!$xml) {
return FALSE;
}
$nodeAttributes = $xml->SD[1]->POPULARITY->attributes();
$text = (int) $nodeAttributes['TEXT'];
$num = number_format($text);
return $num;
}
这只返回3个数字
例如:排名为1,500,500,但仅显示500。
谢谢
答案 0 :(得分:0)
快速而肮脏的回答: 尝试定义数字格式的所有参数,因为我知道它应该工作。 最后,如果nothign else工作,你不需要使用正则表达式,只需要使用你的数字的字符串版本:
function addCommas($number) {
return strrev(join(",",str_split(strrev($number),3)));
}
在键盘上进行简短的测试后,我可以向您保证您的代码应该按原样运行, 在http://codepad.org/0zLuBQp8你会发现一个稍微修改过的演示(我用查询检索数据并将xml粘贴为字符串以避免一些键盘限制)。
(我建议你将xml加载阶段分成两部分,以便检查你的输入是否健康并且你正在操纵正确的数据)
答案 1 :(得分:-1)
你总是可以运行一个简单的while语句::
$text = (int) $nodeAttributes['TEXT'];
while (true){
$num = preg_replace('/(-?\d+)(\d\d\d)/', '$1,$2', $text );
if ($num != $text ) {
$text = $num;
} else {
break;
}
}
return $num;