2

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

谢谢你

4

2 回答 2

0

快速而肮脏的答案:尝试定义数字格式的所有参数,因为我知道它应该起作用。最后,如果 nothign else 有效,您不需要使用正则表达式,只需使用您的号码的字符串版本:

function addCommas($number) {
    return strrev(join(",",str_split(strrev($number),3)));
}

在键盘上进行简短的测试后,我可以向您保证,您的代码应该按原样工作,在http://codepad.org/0zLuBQp8 ,您会发现一个稍作修改的演示(我已通过查询检索数据并粘贴了 xml作为字符串来规避一些键盘限制)。

(我建议您将 xml 加载阶段一分为二,以检查您的输入是否正常并且您正在操作正确的数据)

于 2012-11-16T17:37:19.047 回答
-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;
于 2012-11-16T16:21:18.887 回答