2012-11-09 48 views
2

我有這樣的陣列中的PHP中,PHP提取並計算每個元件的第一元件在多維數組

$mainArray = array(
     array("apple","two", "grren"), 
     array("samsung","five", "red"), 
     array("microsoft","one","gray"), 
     array("apple","nine", "blue"), 
     array("samsung","ten", "white"), 
     array("nokia","seven", "yellow") 
    ); 

我可以很容易地循環通過它,並提取每個陣列的所有的第一項是這樣的:

foreach($mainArray as $w => $n) { 
    $whatever = $mainArray[$w][0]; 
} 

我想指望有多少項在每個數組的第一個元素是相同的,並有類似的結果:

apple (2) 
samsung (2) 
microsoft (1) 
nokia (1) 

我只是不確定什麼是正確的方法來做到這一點。

預先感謝您。

回答

1
$count = array(); 
foreach($mainArray as $array) { 
    $first = $array[0]; 
    if(!isset($count[$first])) $count[$first] = 0; 
    $count[$first]++; 
} 

print_r($count); 
1

通過推入一個新的數組($result在我的例子),然後調用該array_count_values()陣列上收集深陣列的每一個元素。像這樣:

$mainArray = array(
    array("apple","two", "grren"), 
    array("samsung","five", "red"), 
    array("microsoft","one","gray"), 
    array("apple","nine", "blue"), 
    array("samsung","ten", "white"), 
    array("nokia","seven", "yellow") 
); 

$result = array(); 
foreach($mainArray as $k => $v) 
{ 
    // let's continue if $v is not an array or is empty 
    if(!is_array($v) || empty($v)) continue; 

    $result[] = $v[ 0 ]; 
} 

var_dump(array_count_values($result)); 
0

您可以遍歷$mainArray構建值的完整陣列/列表,然後使用上array_count_values()

$firstElements = array(); 
foreach ($mainArray as $arr) { 
    $firstElements[] = $arr[0]; 
} 
$counts = array_count_values($firstElements); 

另一種辦法是遍歷$mainArray並插入值作爲數組的索引(如果它不存在的話),然後每次遞增一次(這與最後的array_count_values()做同樣的事情):

$counts = array(); 
foreach ($mainArray as $arr) { 
    if (!isset($counts[$arr[0]])) $counts[$arr[0]] = 0; 
    $counts[$arr[0]]++; 
} 
0

你可以做到這一點,就像這樣:

foreach($mainArray as $n) { 
    $count[$n[0]] = isset($count[$n[0]]) ? $count[$n[0]]++ : 1; 
} 

var_dump($count); //should give you something like 
/* 
array(4) { 
    ["apple"]=> 
    int(2) 
    ["samsung"]=> 
    int(2) 
    ["microsoft"]=> 
    int(1) 
    ["nokia"]=> 
    int(1) 
} 
*/ 
+0

你們岩石,謝謝你快速幫助,大加讚賞。 – nadav

7
print_r(
    array_count_values(
     array_map('array_shift', $mainArray) 
    ) 
); 

輸出(Demo):

Array 
(
    [apple] => 2 
    [samsung] => 2 
    [microsoft] => 1 
    [nokia] => 1 
) 

因此,即使我的foreach的忠實粉絲,我爲什麼不能在這裏使用它?

首先,要計算數組中的值,在PHP中我們有array_count_values。它爲我們做好了工作。

所以剩下的唯一問題就是把所有的第一項放到一個數組中,用array_count_values來計算它們。這是一個典型的繪圖工作,我也喜歡映射,旁邊foreach所以我試圖如果array_map連同array_shift工作 - 它做到了。

但是,您可能需要查找名爲array_column的函數。這是尚未公佈與PHP本身,而是as PHP code in another answer

$counts = array_count_values(array_column($mainArray, 0)); 
+3

*戴夫帽*演奏得好。 –

+0

對於這樣的答案,one-upvote-per-answer是簡短的:-) – Nelson

相關問題