我有一个具有以下值的数组:1,1,3,5,1,1,3,5,1,1,3,5,1,1,3,5
您可以轻松查看此数组,并看到模式1,1,3,5重复4次
我如何让PHP为我解决这个问题?
此外,我的数组可能有多个需要找到的模式
例如,如果数组是:1,2,1,2,1,2,4,5,5,5
我需要输出像“模式1,2重复3次4次重复1次和5次重复3次。”
最终我想要做的是上传一个CSV文件并解析它,以便用简单的英文阅读。
答案 0 :(得分:1)
这是我得到的:
$arr=array(1,1,3,5,1,1,3,5,1,1,3,5,1,1,3,5);
$p=array();
for($i=0;$i<count($arr);$i++){
$tmp=$arr[$i].'';
for($j=$i;$j<count($arr);$j++){
$tmp.=','.$arr[$j];
if(isset($p[$tmp])){
//nope
}
else{
//nice try
}
}
}
foreach($p as $key=>$val){
if($val>1)
echo "The patter: $key appeared $val times<br>";
}
不是逐字逐句。我可能删除了两行和总共4个其他字符。祝你好运找到了什么!
答案 1 :(得分:0)
我将获取数组并循环获取它的第一个n
值,并在数组中查找它们,然后存储连续出现的次数,递增n
并再次执行。所以它需要1
,而事件将是一个。那么它将需要1,1
而且仍然是一个。然后是1,1,3
,它仍然是一个。那么1,1,3,5
就是四个。在这一点上,它继续采取1,1,3,5,1
并寻找它,再给一个。由于这小于最后找到的(四),它会停止,收回最后一个模式,将其存储在具有重复次数的另一个数组中,然后从数组中移出所有重复的模式,重新开始。这是概念,实现它,好吧,我将继续努力。 :P
答案 2 :(得分:0)
你应该实现并修改一个名为turtle和hare的算法,它可以检测周期(http://en.wikipedia.org/wiki/Cycle_detection)。 通过修改它,您可以计算不同模式的重复。
您也可以尝试生成字符串的所有子序列,表示数组元素的串联,但它根本没有优化(只要数组的长度很高)。
答案 3 :(得分:0)
这可能有助于找到所有类似的模式。
$arr = array(1,1,3,5,1,1,3,5,1,1,3,5,1,1,3,5,1,1,3,5);
$data = implode('', $arr);
for($i=0; $i < count($arr)-1; $i++){
$pattern .= $arr[$i];
if (substr_count($data ,$pattern) !=1)
echo $pattern . ' found '.substr_count($data ,$pattern). ' times<br />';
}