2012-06-09 58 views
-1

我有一個數組,其中填入每個元素的字符串類型。例如:查找部分數組中字符串的出現

類型陣列

type1 | type2 | type2 | type3 | type2 | type1 | type3 

$types = array('type1', 'type2', 'type2', 'type3', 'type2', 'type1', 'type3') 

現在我想,因爲我迭代陣列計數每種類型的發生。

例如:

當我在所述陣列的所述第一元件我想返回:

type1 : 1 
type2 : 0 
type3 : 0 

當我在第四元件欲:

type1 : 1 
type2 : 2 
type3 : 1 

其實,我只想找到我正在尋找的元素類型的發生。例如:fourth element

type3: 1 

有沒有一個PHP函數來做到這一點?或者我將不得不迭代整個數組並計算類型的出現次數?

感謝

+0

而不是使用僞代碼的語法,使用真正的PHP數組。 –

+0

什麼都沒有我問是否有一個PHP函數來做到這一點。我知道如何做到這一點,但我相信現在是高效的。我現在會提供php代碼。 – glarkou

+0

這些類型是*數據類型*? –

回答

1

沒有一個本地函數來做到這一點。但是,我們可以寫一個簡單的一個:

$items = array(
     'type1', 
     'type2', 
     'type2', 
     'type3', 
     'type2', 
     'type1', 
     'type3' 
    ); 

    foreach ($items as $order => $item) { 
     $previous = array_slice($items, 0, $order + 1, true); 
     $counts = array_count_values($previous); 

     echo $item . ' - ' . $counts[$item] . '<br>'; 
    } 

這段代碼產生這樣的:

type1 - 1 
type2 - 1 
type2 - 2 
type3 - 1 
type2 - 3 
type1 - 2 
type3 - 2 
1

我不知道我已經完全明白你的問題,但如果你要計算一個數組中所有的值,你可以使用array_count_values功能:

<?php 
$array = array(1, "hello", 1, "world", "hello"); 
print_r(array_count_values($array)); 
?> 

The above example will output: 
Array 
(
    [1] => 2 
    [hello] => 2 
    [world] => 1 
) 
+0

把我打敗; p –

0

這裏是正確的解決方案:

$index = 4; 
$array = array('type1', 'type2', 'type2', 'type3', 'type2', 'type1', 'type3') 
var_dump(array_count_values(array_slice($array, 0, $index))); 

如果使用array_slice搶陣列的部分,然後運行它array_count_values,可以有效計算在v一個子陣列的線索。因此,對於任何$index,可以將0的值計爲$index

此輸出:

array(3) { ["type1"]=> int(1) ["type2"]=> int(2) ["type3"]=> int(1) }