2

私はalexa関数を持っていて、alexaランクを返します。3桁ごとにカンマを入れたい。

例: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の読み込みフェーズを2つに分割することをお勧めします)

于 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 に答える