2012-02-08 11 views
0

Twitterのカウント数とFeedburnerのカウント数を追加しようとしていますが、2つを基本的な加算で組み合わせると失敗します。私はvalkuesを取得し、それが正常に動作しますseperatleyそれらを印刷する場合は、ちょうど私が2を追加できなくなる...PHPで数字が正しく追加されない

$twitCnt = twitter_subscribers(TWITTER_USERNAME); 
$feedCnt = feed_subscribers(FEEDBURNER_USERNAME); 
$totalCnt = $twitCnt + $feedCnt; 

echo $totalCnt; 

$twitCntは= 2000 $feedCntであると仮定し、私がしようとすると、今すぐ= 1000

ですしかし、私は$twitCnt$feedCntは、彼らが正しい金額を示して印刷する場合、私は、$feedCnt値+ 1 = 1001代わりに、私は現在、困惑しています3000

のを取得する代わりに3000を得るための2を追加しますコードに2を追加すると、$twitCntは実際の値ではなく、1と表示されます。

何が原因でしょうか?また、統計情報を取得するための機能をvar_dump($twitCnt, $feedCnt)

string(5) "3,000" 
object(SimpleXMLElement)#238 (1) { 
    [0]=> 
    string(5) "1,000" 
} 

を実行した後


更新...

function twitter_subscribers($username = 'yourname'){ 
    $count = get_transient('twitter_count'); 
    if ($count != false){ 
     return $count; 
    }else{ 
     $count = 0;   
     $url = 'http://api.twitter.com/1/users/show.xml?screen_name='. $username; 
     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($ch, CURLOPT_URL, $url); 
     $data = curl_exec($ch); 
     curl_close($ch); 
     $xml = new SimpleXMLElement($data); 
     $count = $xml->followers_count; 
     $count = (float) $count; 
     $count = number_format($count); 
     set_transient('twitter_count', $count, 21600); // 6 hour cache 
     return $count; 
    } 
} 

function feed_subscribers($username = 'yourname') 
{ 
    $feed_url = 'http://feeds.feedburner.com/' . $username; 
    $count = get_transient('rss_count'); 
    if ($count != false) 
     return $count; 
    $count = 0; 
    $data = wp_remote_get('http://feedburner.google.com/api/awareness/1.0/GetFeedData?uri=' . 
     $feed_url . ''); 
    if (is_wp_error($data)) { 
     return 'error'; 
    } else { 
     $body = wp_remote_retrieve_body($data); 
     echo $body; 
     $xml = new SimpleXMLElement($body); 
     $status = $xml->attributes(); 
     if ($status == 'ok') { 
      $count = $xml->feed->entry->attributes()->circulation; 
     } else { 
      $count = 300; // fallback number 
     } 
    } 
    set_transient('rss_count', $count, 21600); // 6 hour cache//60*60*24 

    return $count; 
} 
+1

'var_dump($ twitCnt);の結果を表示します。 var_dump($ feedCnt); ' – deceze

+1

最初に何を確認するには 'var_dump($ twitCnt、$ feedCnt)'してください。 – xdazz

+0

上記の 'var_dump'の結果を – CodeDevelopr

答えて

3

まあ、最初$twitCntあなたは変数に値を直接フォーマットする理由(私はあなたがそれを表示する前にその値を計算する必要があるので、あなただけときにそれをフォーマットする必要があり、知らないフォーマットされた文字列でありますが表示されます)。 $feedCntSimpleXMLElementのオブジェクトです。

この問題を解決するには、$twitCntをフォーマットしないでください。値を表示するとき(つまり、エコーするとき)にのみユーザーに表示してください。そして、この行$count = $xml->feed->entry->attributes()->circulation;を修正して、オブジェクトではなく数値を返します。

** **

更新は、私は、コードの小片がhereを発見し、実際の数値にあなたのフォーマットされた数値を変換するためのソリューションとして、あなたにそれを与えました。例えば

、それは1,200.123

function formattedStringToNumeric($str) { 
    $a = array_pad(explode(".",str_replace(',','',$str)), 2, 0);   // Split the string, using the decimal point as separator 
    $int = $a[0];      // The section before the decimal point 
    $dec = $a[1];      // The section after the decimal point 
    $lengthofnum=strlen($dec);   // Get the num of characters after the decimal point 
    $divider="1";      // This sets the divider at 1 
    $i=0; 
    while($i < ($lengthofnum)) { 
    $divider.="0";     // Adds a zero to the divider for every char after the decimal point 
    $i++; 
    } 
    $divider=(int)$divider;    // Converts the divider (currently a string) to an integer 
    return $int+($dec/$divider);  // compiles the total back as a numeric 
} 

1200.123への変換しかし、あなたは、単に行うことができたときに、なぜ複雑になります。

$value = (float) str_replace(',','',$string); 
+0

FYI、 'return(int)$ count'のように、必要なデータ型に' SimpleXMLElement'をキャストする必要があります。フィードバーナーカウントのフォーマットがどこから来ているのか分かりません – Phil

+0

助けを借りてくださった皆さん、ありがとうございました。私のコードは数字を処理する前に '、'を追加していたので、ここに助けなしでこれを得た – CodeDevelopr

1

は、変数が数値であることを、確認してください。

$totalCnt = (int)$twitCnt + (int)$feedCnt; 
2

問題はここにある:

$count = $xml->feed->entry->attributes()->circulation; 

SimpleXMLElement::attributes SimpleXMLElementオブジェクトを返します。したがって、doeプロパティの1を取得していますが、予想されるデータにキャストできるのは、あなたがTwitterの機能で、ここで行ったように入力します。

$count = $xml->followers_count; 
$count = (float) $count; 

ので、整数にキャストし、フロート、あるいは文字列:

$count = (int) $xml->feed->entry->attributes()->circulation; 
関連する問題