如何组合两个不同的阵列并根据出现的次数对它们进行适当的排序?

时间:2014-02-12 16:55:08

标签: php arrays

我有一些简单的PHP代码,允许我从最活跃的邮政编码和扩展,最活跃的状态中找到最多注册用户。但是我想找到最活跃的县。问题是在多个州使用相同的县名,因此您不希望将它们一起添加。

$sql_top_zips="SELECT zipcode FROM user_list WHERE TRIM(zipcode) != '' ";
$test_results = mysqli_query( $link , $sql_top_zips );
while ($test_check = mysqli_fetch_array($test_results)) 
{     
    $top_zips   =   $test_check["zipcode"];
    $details = $z->get_zip_details($top_zips);

    $county[]= $details['county'];
    $states[]= $details['state_name'];
}
$top_county = array_count_values($county);
arsort($top_county);
$x=0;
foreach($top_county as $results=>$counter) {
    echo $results."<br>";
    $x++;
    if ($x==5) {break;}
}

因此,使用这个简单的代码,我可以创建前5个县的列表。如果对数组视图使用print_r(),则可以看到带有一些演示数据的Array ( [Madison] => 4 [Davidson] => 3 [Harris] => 2 [Grant] => 1 [Morgan] => 1)。所以这很好。

但如果有人在杰克逊县,在美国各地发生超过20次,那么你会得到一个错误的数字,因为你实际上是在谈论不同的杰克逊县。

我认为我的解决方案是尝试这个:

$test[]=$details['county']['state_name'];
$testb=array_count_values($test);
arsort($testb);

但是我使用print_r()这样奇怪的东西:Array ( [M] => 6 [D] => 4 [H] => 3 [L] => 2 [U] => 2 [R] => 2 [P] => 1 )

我的目标是列出州名称,如下所示:Jackson TN, Jackson MS,但最常见的是。我觉得我接近解决方案,但我遗漏了一些明显的东西。

2 个答案:

答案 0 :(得分:0)

您的连接不正确。尝试这样的事情......

$test[]=$details['county'] . " " . $details['state_name'];

答案 1 :(得分:0)

你很接近,你需要做的是使用县和州作为数组中的键。这样的事情应该会有所帮助:

$array = array();
while ($test_check = mysqli_fetch_array($test_results)) {
    $details = $z->get_zip_details($test_check["zipcode"]);
    $key = $detail['county'] . ' ' . $details['state_name'];
    //If we've not encountered this county in this state, we initiate it in the array, starting the count at 0.
    if(!isset($array[$key])) {
        $array[$key] = 0;
    }
    $array[$key]++;
}
asort($array);
var_dump($array);