2014-01-31 91 views
0

我有这样的阵列:PHP:在阵列计数值

array(66) { 
    [0]=> array(2) { 
    ["location"]=> string(10) "Breakwater" ["bsid"]=> string(4) "105a" 
    } 
[1]=> array(2) { 
    ["location"]=> string(10) "Breakwater" ["bsid"]=> string(4) "105b" 
    } 
[2]=> array(2) { 
    ["location"]=> string(10) "Breakwater" ["bsid"]=> string(4) "105c" 
    } 
[3]=> array(2) { 
    ["location"]=> string(10) "Breakwater" ["bsid"]=> string(4) "105d" 
    } 
[4]=> array(2) { 
    ["location"]=> string(10) "Breakwater" ["bsid"]=> string(4) "117b" 
    } 
[5]=> array(2) { 
    ["location"]=> string(10) "Breakwater" ["bsid"]=> string(4) "117c" 
    } 
[6]=> array(2) { 
    ["location"]=> string(10) "Breakwater" ["bsid"]=> string(4) "123a" 
    } 
[7]=> array(2) { 
    ["location"]=> string(10) "Whateverelse" ["bsid"]=> string(4) "123b" 
    } 
} 

我怎么能指望有多少防波堤的,以及有多少Whateverelse的和得到的东西是这样的:

array(2) { 
    [0]=> array(2) { 
     ["Breakwater"]=> string(2) "20" 
    } [1]=> array(2) { 
     ["Whateverelse"]=> string(1) "1" 
    } 
} 

回答

2

只是循环周围原始数组,并且每次命中某个位置时,都会在位置数组中的索引位置处增加一个计数器。

$loc = array(); 
foreach($arr as $value) { 
    $location = $value['location']; 
    if(isset($loc[$location])) { 
     $loc[$location]++; 
    } else { 
     $loc[$location] = 1; 
    } 
} 
print_r($loc); 

将输出

array 
(
    ["Breakwater"] => 7, 
    ["Whateverelse"] => 1 
} 
+0

这比我的好:) –

0

我得到这个最后:

$output = array("Breakwater" => 0, "Whateverelse" => 0); 

foreach ($array as $val) { 
    $output["Breakwater"] += ($val["location"] == "Breakwater") ? 1 : 0; 
    $output["Whateverelse"] += ($val["location"] == "Whateverelse") ? 1 : 0; 
} 

var_dump($output); 
+0

在这种情况下,是的,但如果你有你的数组中的10000个位置是什么? @瑞恩的答案是普遍的,无论有多少记录和位置在阵列中,它都可以工作。 – ex3v

+0

@ ex3v,我同意看看我对Ryan的回答的评论 –