2014-09-03 52 views
-3

定製指望我有一個字符串數組PHP如下:數組PHP

Tim Jones 
Karl Smith 
Tim Jones 
T Jones 
K Smith 
Tim JONES 

我想獲得每個陣列中的字符串中出現的次數的計數。我用array_count_values。但它返回

Tim Jones : 2 
Karl Smith : 1 
T Jones : 1 
K Smith : 1 
Tim JONES : 1 

但我只需要檢查的姓氏和名字也的第一個字母計數

Tim Jones : 4 
Karl Smith : 2 

任何建議,如何做到這一點。由於

編輯

這是一個比較正確的示例。如果數組是

Tim Jones 
Karl Smith 
Harry Jones 
Tim Jones 
T Jones 
K Smith 
Tim JONES 

輸出應該

Tim Jones : 4 
Karl Smith : 2 
Harry Jones : 1 

我不是那麼熟悉PHP。我碰到array_count_values並嘗試過。但我需要做一些數組分割和搜索和計數。

基於克里斯代碼,這是我現在有

<?php 
$names = array (
'Tim Jones', 
'Karl Smith', 
'Tim Jones', 
'T Jones', 
'K Smith', 
'Tim JONES' 
); 

$counts = array(); 
$actualMap = array(); 

foreach ($names as $name) { 
$last_name = strtolower(array_pop((explode(' ', $name)))); 
$first_name_letter = substr(strtolower(array_shift((explode(' ', $name)))), 0, 1); 

$first_name = array_shift(explode(' ',$name)); 
$actualKey = $first_name . ' '. ucfirst($last_name); 

$key = $first_name_letter . ' '. $last_name; 

if (array_key_exists($key, $counts) === false){ 
    $counts[$key] = 0; 
    $actualMap[$key] = $actualKey; 
} 

$counts[$key]++; 
} 
print_r($counts); 
print_r($actualMap); 

?> 

我得到以下

Array ([t jones] => 4 [k smith] => 2) Array ([t jones] => Tim Jones [k smith] => Karl Smith) 

我現在需要更換密鑰

+3

使姓氏的數組,並調用'array_count_values'上那。 – Barmar 2014-09-03 20:14:04

+0

告訴我們你到目前爲止做了什麼,你需要搜索姓氏,你需要姓氏作爲數組,然後使用http://php.net/manual/en/function.strpos.php – HADI 2014-09-03 20:17:37

+0

http:// codepad.viper-7.com/E4kFgR – 2014-09-03 20:19:07

回答

0

1) 運行通過列表創建一個[(First letter + " " +unique last name, count=0) , ...]清單,你去。

您可以使用array_unique。 Here是文檔

2) 然後再次遍歷列表,並與第一個列表相比較,並添加到該唯一姓氏的計數中。

0

不是100%肯定,如果這是你問什麼,但我會在陣列中標準化的名字,然後你可以指望他們

$array=array("Tim Jones","Karl Smith","Tim Jones","T Jones","K Smith","Tim JONES"); 

function editArray($array){ 
foreach($array as $x){ 
    list($firstname,$notfirst)=explode(" ",$x); 
    $newnames[]=strtolower($firstname[0]." ".$notfirst); 
} 
return $newnames; 
} 
$newarray=editArray($array); 
print_r(array_count_values($newarray));