2012-03-18 2 views
1

임의의 문자열 문자열이 있는데 배열 구성원간에 어떤 문자가 일치하는지 알아야합니다. 편지의 수는 중요합니다.문자열 배열 사이의 중복 문자 수 결정

내 방법 지금 루프, 배열 통해 다음 그런 다음 새를 만드는 array_reduce을 한 후, 각 문자의 발생을 계산 letter => count

와 배열을 업데이트에서 등록한 문자열을 통해 반복, 분할 하 고 모든 배열에서만 발생하는 구성원의 배열입니다. 그러나 작동하지 않습니다. 좀 권리 인 만 2 i 's은 (는) 배열의 마지막 요소에있다 -

<? 
$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 반환합니다. 나머지에는 단 하나의 i이 있습니다. 나는 멀리 그것을 분해하고 aaimqruu 반환하는 방법을 잘 모르겠어요 - 가장 가능성이있는 array_intersect()을있다 aquarium

+0

좀 더 구체적으로 제 질문을 수정했고 업데이트 된 코드를 추가했습니다. –

답변

0

그러나 나는 단지를 추가 생각하지 않았다 보인다 위 조건부로 원하는 효과를 얻으십시오.

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

$new[$key] = $val; 

가 속임수를 썼는지 교체합니다.

1

, 그때 일치하는 단어를 찾기 위해 SQL 쿼리에 팝업 것입니다 당신이 좋겠 필요. $ a 배열을 감안하면 다음과 같이 할 수 있습니다.

$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

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); 

는 테스트 :

은 올바른 배열을 사용하여, 12 제공합니다.


업데이트

내 솔루션 이미 대답을했다 array_reduce 무엇 이러한 목적에 가장 적합한 기능처럼

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

불행히도,이'findDuplicate' 함수는 문자와 숫자를 나타내는 문자열이나 배열을 반환하기를 원하는 곳에 count를 반환합니다. (예 :'aaimqruu' 또는'Array ([a] => 2, [i] => 1, [m] => 1, [q] => 1, [r] => 1, [u] => 2)') –

+0

@kavisiegel, 내 업데이트를 참조하십시오. – Starx