在php数组中查找模式
例如: 主数组是:在php数组中查找模式,php,arrays,search,find,Php,Arrays,Search,Find,例如: 主数组是:array(0=>'A',1=>'A',2=>'B',3=>'B',4=>'B') 模式是:array('A','B') 预期答案:array(array(0,2),array(1,3)) 再举一个例子: 主数组数组(0=>'F',5=>'G',78=>'R',2=>'D') 模式数组('G','R','F') 预期答案:array(array(5,78,0)) 如何在数组中找到所有出现的模式?这里有一个使用递归的函数 function array_pattern($array
array(0=>'A',1=>'A',2=>'B',3=>'B',4=>'B')代码>
模式是:array('A','B')代码>
预期答案:array(array(0,2),array(1,3))
再举一个例子:
主数组<代码>数组(0=>'F',5=>'G',78=>'R',2=>'D')代码>
模式数组('G','R','F')代码>
预期答案:array(array(5,78,0))
如何在数组中找到所有出现的模式?这里有一个使用递归的函数
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();
}
可以这样称呼:
$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'));
演示:我没有测试以下代码,但它可能会给您一些想法
$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++;
}
}
$arr=array(0=>'A',1=>'A',2=>'B',3=>'B',4=>'B');
$test=数组('G','R','F');
$count=0;
$count2=0;
对于($i=0;$i)什么是array(0,2)
和array(1,3)
mean?@Rocket,我认为把它看作array('A'=>array(0,2),'B'=>array(1,3))@Rocket它是模式匹配元素的ID。在这个例子中,有两个匹配对->(0,2)(1,3)@Yekver:那么对于array(0,2)
。0
是模式数组中A
的索引。2
是主数组中A
s的数量?@Rocket:nope,对于数组(0,2)
来说,0
是主数组中A
的索引,2
是主数组中B
的索引