Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP数组:计算类似的输出并显示_Php_Arrays - Fatal编程技术网

PHP数组:计算类似的输出并显示

PHP数组:计算类似的输出并显示,php,arrays,Php,Arrays,我试图做的是获取一个数组输出,该数组输出的引用列表保存在数据库中,用于某个链接。到目前为止,我已经得到了它,但我无法得到相同的推荐人计数,而不是显示他们一次又一次。 以下是我编写的函数: <?php function get_links_ref($astats) { $sExistedLink= ''; $sMyLinkSQL = "SELECT * FROM `log` WHERE `shorturl`='{$astats}' ORDER BY `click_i

我试图做的是获取一个数组输出,该数组输出的引用列表保存在数据库中,用于某个链接。到目前为止,我已经得到了它,但我无法得到相同的推荐人计数,而不是显示他们一次又一次。 以下是我编写的函数:

<?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 3
Twitter 2

在浏览阵列时保留一个计数器:

$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>";
}

只需稍加修改即可使用精确的代码

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;   
}

提示2:阅读mysqlgroup-BY和COUNT,请正确缩进您的代码,没有ita很难理解。小示例代码将很有帮助please@Ayaz马利克:作为一名程序员,你应该知道如何编程。编程比复制粘贴要难一点道歉,我不是一个好的程序员。。。尝试通过为自己编写测试脚本来学习:{在学习过程中设置$counts[Direct]?$counts[Direct]+1-这个复制粘贴驱动的代码可以通过使用key.k ic引入一个变量来避免,但是现在它开始给出这样的结果:facebook1 facebook2 facebook3而不是facebook3@Ayaz-不,不是。你一定是复制不正确,或者打印不正确,因为。它似乎有一些错误,我正在工作我正在修理它们。