[英]Finding patterns in php array
For example: 例如:
main array is: array(0 => 'A', 1 => 'A', 2 => 'B', 3 => 'B', 4 => 'B');
主数组是: array(0 => 'A', 1 => 'A', 2 => 'B', 3 => 'B', 4 => 'B');
pattern is: array('A', 'B');
pattern是: array('A', 'B');
expected answer: array( array(0, 2), array(1, 3) )
预期答案: array( array(0, 2), array(1, 3) )
one more example: 再举一个例子:
main array array(0 => 'F', 5 => 'G', 78 => 'R', 2 => 'D');
主阵列array(0 => 'F', 5 => 'G', 78 => 'R', 2 => 'D');
pattern array('G', 'R', 'F');
模式array('G', 'R', 'F');
expected answer: array(array(5, 78, 0))
预期答案: array(array(5, 78, 0))
How can I find all occurrences of pattern in array? 如何在数组中找到所有出现的模式?
Here's an function that uses recursion. 这是一个使用递归的函数。
function array_pattern($array, $pattern){
$ret = array(array());
$found = true;
foreach($pattern as $val){
$x = array_search($val, $array);
if($x === FALSE){
$found = FALSE;
break;
}
unset($array[$x]);
$ret[0][] = $x;
}
return $found ? array_merge($ret, array_pattern($array, $pattern)) : array();
}
Call it like this: 像这样称呼它:
$a = array_pattern(array(0 => 'A', 1 => 'A', 2 => 'B', 3 => 'B', 4 => 'B'), array('A', 'B'));
$b = array_pattern(array(0 => 'F', 5 => 'G', 78 => 'R', 2 => 'D'), array('G', 'R', 'F'));
DEMO: http://codepad.org/JCdsAMGk 演示: http : //codepad.org/JCdsAMGk
I didn't test the following code, but it may give you ideas. 我没有测试以下代码,但它可能会给你一些想法。
$arr = array(0 => 'A', 1 => 'A', 2 => 'B', 3 => 'B', 4 => 'B');
$test = array('G', 'R', 'F');
$count = 0;
$count2 = 0;
for($i=0;$i<count($arr);$++){
$pass= true;
if(count($test)+$count <= count($arr)){
for($k=0;$k<count($test);$k++){
if($arr[k+i]!=$test[k]){
$pass = false;
}
}
}else{
$pass = false;
}
if($pass){
$output[$count2] = $i;
$count2++;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.