如何将关联数组元素按索引分组在一起

时间:2019-03-27 18:54:49

标签: php mysql

我的老板想显示人们要求获得特许经营数据的最受欢迎的州。我正在使用用户放入的邮政编码。我通过一个函数运行它来查找状态,但是问题是我对每个邮政编码都有一个计数,而不是该状态本身的总数。我需要将每个邮政编码的总数合并为一个州的总数。

我可以通过将一个计数器放在循环中来添加所有这些内容,但是对于每个状态它都不会中断。所以我想解决方案是一种在状态改变时打破循环的方法吗?所以目前的输出是这样的:

纽约-8 纽约-11 纽约-236 纽约-7 加利福尼亚-2 阿拉巴马州-7

我需要将所有纽约添加到一个类别中。

<?php
include("databaseClass.php");
$databaseClass = new databaseClass();
$conn = $databaseClass->connect();
$countFranArr = array();
$running = 0;


$sqlFranCount = "select client_zip, count(*) as total from request_form_commits inner join franchise on franchise.franchise_id = request_form_commits.franchise_id 
                where time_of_request >= '2011-03-20 18:01:04' and time_of_request <= '2033-03-20 21:03:22' group by client_zip";
                   $resultFranCount = $conn->query($sqlFranCount);
                   if($resultFranCount->num_rows > 0)
                   {
                     while($rowFranCount = $resultFranCount->fetch_assoc())
                     {
                       //array_push_assoc($countCatArr, $rowCatCount['fdd_category'], $rowCatCount['total']);
                       //echo $rowCatCount['total']."<br>";
                       $countFranArr[$rowFranCount['client_zip']] = $rowFranCount['total'];
                     }
                   }


                //arsort($countFranArr);

                foreach($countFranArr as $zip=>$total)
                { 
                    //echo $databaseClass->getState($zip)." - ".$total."<br>";
                    $state = $databaseClass->getState($zip);
                    if($state == "")
                    {
                        echo "";
                    }
                    else{
                        echo $state." - ".$total."<br>";
                        $running = $running + $total;
                    }

                }
echo $running;


?>

预期结果将是

纽约267 加利福尼亚-3 等等...

每个州总共有一个计数,因此我可以按最受欢迎的顺序订购

1 个答案:

答案 0 :(得分:1)

在您的第一个循环中,有几种方法可以做到这一点,

while($rowFranCount = $resultFranCount->fetch_assoc()) {
    $state = $databaseClass->getState($rowFranCount['client_zip']);

    if(!isset($result[$state])) {
        $result[$state] = 0;
    }
    $result[$state] += $rowFranCount['total'];
}

然后循环显示结果:

foreach($result as $state => $total) {
    echo "$state - $total<br>";
}