【问题标题】:Finding patterns in php array在 php 数组中查找模式
【发布时间】:2012-07-10 03:57:48
【问题描述】:

例如:

主数组为:array(0 => 'A', 1 => 'A', 2 => 'B', 3 => 'B', 4 => 'B');

模式是:array('A', 'B');

预期答案:array( array(0, 2), array(1, 3) )

再举一个例子:

主数组array(0 => 'F', 5 => 'G', 78 => 'R', 2 => 'D');

模式array('G', 'R', 'F');

预期答案:array(array(5, 78, 0))

如何在数组中找到所有出现的模式?

【问题讨论】:

  • array(0, 2)array(1, 3) 是什么意思?
  • @Rocket 我认为将其视为 array( 'A' => array( 0, 2 ), 'B' => array( 1, 3 ) ) 更有意义跨度>
  • @Rocket 它是模式匹配元素的 ID。例如有两个匹配的对 -> (0,2) (1,3)
  • @Yekver:所以对于array(0, 2)0 是模式数组中A 的索引。而2 是主数组中As 的数量?
  • @Rocket:不,array(0, 2)0A在主数组中的索引,2B在主数组中的索引跨度>

标签: php arrays search find


【解决方案1】:

这是一个使用递归的函数。

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

演示:http://codepad.org/JCdsAMGk

【讨论】:

    【解决方案2】:

    我没有测试以下代码,但它可能会给你一些想法。

    $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++;
         }
    
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-21
      • 1970-01-01
      • 2017-07-18
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多