Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 确定字符串数组之间的重复字母计数_Php - Fatal编程技术网

Php 确定字符串数组之间的重复字母计数

Php 确定字符串数组之间的重复字母计数,php,Php,我有一个随机字母字符串数组,我需要知道数组成员之间哪些字母是一致的。字母的计数很重要 我现在的方法是循环数组,进行拆分,然后循环字符串以计算每个字母的出现次数,然后使用letter=>count 然后执行一个array_reduce,创建一个只出现在所有数组中的新成员数组。但是,它不起作用 <? $a[] = "emaijuqqrauw"; $a[] = "aaeggimqruuz"; $a[] = "aabimqrtuuzw"; $a[] = "aacikmqruuxz"; $a[] =

我有一个随机字母字符串数组,我需要知道数组成员之间哪些字母是一致的。字母的计数很重要

我现在的方法是循环数组,进行拆分,然后循环字符串以计算每个字母的出现次数,然后使用
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);
}
有,这很可能是您想要的。给定$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);
$a=数组(..您的数组…);
$cnt=计数($a);
对于($i=0;$i<$cnt;$i++){
$a[$i]=分解(“”,$a[$i]);//将每个字符串拆分为字母数组
}
$common=$a[0];//保存第一个元素
对于($i=1;$i<$cnt;$i++){
$common=array_intersect($common,$a[$i]);
}
var_dump(普通美元);

你这样做怎么样?查找项目在整个数组中的出现情况

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


更新 我上面的解决方案已经有了你的答案

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

似乎
array\u reduce
是实现此目的的最佳函数,但是我没有想到添加一个条件以获得所需的效果

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

$new[$key] = $val;

成功了

我已经对我的问题进行了更具体的编辑,并添加了一些更新的代码。不能使用空分隔符拆分字符串。我刚刚发现:)不幸的是,这个
findDuplicate
函数返回一个计数,我希望它返回表示字母及其计数的字符串或数组。(例如:
aaimqruu
数组([a]=>2,[i]=>1,[m]=>1,[q]=>1,[r]=>1,[u]=>2)