-1

私がやろうとしているのは、特定のリンクのdbに保存されているリファラーのリストの配列出力を取得することです。私はこれまでにそれを取得しましたが、それらを何度も表示する代わりに、同じリファラーの数を取得することができません。
これが私が書いた関数です:

<?php 

function get_links_ref($astats) {   
  $sExistedLink= '';    
  $sMyLinkSQL = "SELECT * FROM `log` WHERE `shorturl`='{$astats}' ORDER BY `click_id` DESC";    
  $aLinks = $GLOBALS['oSysDB']->getAll($sMyLinkSQL);    
  foreach ($aLinks as $astats => $aLinkInfo) {  
    $reff = $aLinkInfo['referrer']; 
    $areff = parse_url($reff);  
    if($areff['host'] == 't.co' || $areff['host'] == 'www.twitter.com' || $areff['host'] == 'api.twitter.com'){ 
      $areff['host'] = "Twitter";   
    }   
    if($areff['host'] == 'www.facebook.com' || $areff['host'] == 'm.facebook.com'){ 
      $areff['host'] = "Facebook";  
    }   
    if($areff['host'] == 'bit.ly' || $areff['host'] == 'lilink.it'){    
      $areff['host'] = "Direct";    
    }   
    $sExistedLink .= <<<EOF
      <p>{$areff['host']}</p>       
EOF;

  } 
  return $sExistedLink; 
}   

その見返りに、例として次のようなリストを取得します:Facebook
Twitter
Facebook
Facebook
Twitter

私はこのようなものを得ることができるので、このコードを編集することは可能ですか、括弧内の同じリファラーの総数Facebook(3)
Twitter(2)

4

2 に答える 2

3

アレイを通過するときにカウンターを保持します。

$counts = array();
foreach ($aLinks as $astats => $aLinkInfo) {    
    $reff = $aLinkInfo['referrer'];  
    $areff = parse_url($reff);  

    if($areff['host'] == 't.co' || $areff['host'] == 'www.twitter.com' || $areff['host'] == 'api.twitter.com'){ 
        $counts["Twitter"] = isset( $counts["Twitter"]) ? ($counts["Twitter"] + 1) : 1;
    }   
    if($areff['host'] == 'www.facebook.com' || $areff['host'] == 'm.facebook.com'){ 
        $counts["Facebook"] = isset( $counts["Facebook"]) ? ($counts["Facebook"] + 1) : 1;   
    }   
    if($areff['host'] == 'bit.ly' || $areff['host'] == 'lilink.it'){    
        $counts["Direct"] = isset( $counts["Direct"]) ? ($counts["Direct"] + 1) : 1;
    }
}

これで、次のように文字列を作成して印刷できます。

foreach( $counts as $site => $count)
{
     $sExistedLink .= "<p>$site ($count)</p>";
}
于 2012-08-03T02:57:37.450 に答える
2

小さな変更を加えた正確なコードの使用

function get_links_ref($astats) {   
    $sExistedLink= '';  
    $sMyLinkSQL = "SELECT * FROM `log` WHERE `shorturl`='{$astats}' ORDER BY `click_id` DESC";  
    $aLinks = $GLOBALS['oSysDB']->getAll($sMyLinkSQL);  
    foreach ($aLinks as $astats => $aLinkInfo) {    
        $reff = $aLinkInfo['referrer']; 
        $areff = parse_url($reff);  
        if($areff['host'] == 't.co' || $areff['host'] == 'www.twitter.com' || $areff['host'] == 'api.twitter.com'){ 
            $areff['host'] = "Twitter"; 
        }   
        if($areff['host'] == 'www.facebook.com' || $areff['host'] == 'm.facebook.com'){ 
            $areff['host'] = "Facebook";    
        }   
        if($areff['host'] == 'bit.ly' || $areff['host'] == 'lilink.it'){    
            $areff['host'] = "Direct";  
        }   

        if(!isset($array_count[$areff['host']])) $array_count[$areff['host']] = 0;
        $array_count[$areff['host']]++;
    }

    foreach ($array_count as $key => $value) {
        $sExistedLink .= <<<EOF
<p>$key ($value)</p>     
EOF;   
    }
   return $sExistedLink;   
}
于 2012-08-03T03:01:09.037 に答える