把逗号放在alexa排名中

时间:2012-11-16 16:17:28

标签: php

我有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。

谢谢

2 个答案:

答案 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;