2012-03-18 111 views
1

我有一串隨機字符串,我需要知道哪些字母在數組成員之間是一致的。這些字母的數量很重要。確定字符串數組之間的重複字母計數

我的方法現在是遍歷數組,做一個分割,然後通過吐盡串循環計數每個字母的出現,然後更新letter => count

數組然後做創建一個新的array_reduce僅在所有陣列中出現的成員數組。但是,它不工作。

<? 
$a[] = "emaijuqqrauw"; 
$a[] = "aaeggimqruuz"; 
$a[] = "aabimqrtuuzw"; 
$a[] = "aacikmqruuxz"; 
$a[] = "aacikmqruuxz"; 
$a[] = "aaciimqruuxy"; 

foreach($a as $b){ 
    $n = str_split($b, 1); 
    foreach($n as $z){ 
     $arr[$z] = substr_count($b, $z); 
    } 
    ksort($arr); 
    $array[] = $arr; 
    unset($arr); 
} 

$n = array_reduce($array, function($result, $item){ 
    if($result === null){ 
     return $item; 
    }else{ 
     foreach($item as $key => $val){ 
      if(isset($result[$key])){ 
       $new[$key] = $val; 
      } 
     } 
     return $new; 
    } 
}); 

foreach($n as $key => $val){ 
    echo str_repeat($key, $val); 
} 

這將返回aaiimqruu - 這是有點權,但只有2 i的數組中的最後一個元素。剩下的只有一個i。我不知道如何將它分解得更遠並讓它返回aaimqruu - 然後我會彈出一個SQL查詢來查找匹配的單詞,aquarium

+0

我編輯我的問題是更具體,我已經添加了一些更新的代碼。 – 2012-03-18 04:34:00

回答

0

好像array_reduce是爲了什麼這個目的最好的功能,但是我只是沒想到加入的有條件給我想要的效果。

$new[$key] = ($result[$key] > $val) ? $val : $result[$key]; 

更換

$new[$key] = $val; 

的伎倆。

1

array_intersect(),這很可能是你想要的想。鑑於你的$陣列,你會做這樣的事情:

$a = array(.... your array...); 
$cnt = count($a); 
for($i = 0; $i < $cnt; $i++) { 
    $a[$i] = explode('', $a[$i]); // split each string into array of letters 
} 
$common = $a[0]; // save the first element 
for($i = 1; $i < $cnt; $i++) { 
    $common = array_intersect($common, $a[$i]); 
} 

var_dump($common); 
+0

字符串不能使用空分隔符分割。我只是發現:) – Starx 2012-03-18 05:18:38

1

你如何做到這一點?在整個數組中找出項目的發生。

function findDuplicate($string, $array) { 
    $count = 0; 
    foreach($array as $item) { 
     $pieces = str_split($item); 
     $pcount= array_count_values($pieces); 
     if(isset($pcount[$string])) { 
      $count += $pcount[$string]; 
     } 
    } 
    return $count; 
} 

echo findDuplicate("a",$a); 

測試:)

給人,使用陣列,這是正確的。


更新

我的解決方法上面已經有了答案

$pieces = str_split($item); 
    $pcount= array_count_values($pieces); 
    //$pcount contains, every count like [a] => 2 
+0

不幸的是,這個'findDuplicate'函數返回一個計數,我希望它返回一個代表字母和數字的字符串,或一個數組。 (例如:aaimqruu或陣列([a] => 2,[i] => 1,[m] => 1,[q] => 1,[r] => 1,[u] => 2)') – 2012-03-20 15:11:03

+0

@kavisiegel,看我的更新。 – Starx 2012-03-20 17:37:20

相關問題