在Array PHP中找到第一个和最后一个匹配序列



我有一个数组来查找字母顺序,然后获取最后和第一个组合。我正在尝试这样的事情。

$aarr = ['x','y','z','t','m','n','x','y','z'];
$str = implode('',$aarr);
$all_subset = powerSet($aarr);
foreach ($all_subset as $set) {
    $sre_temp = implode('', $set);
    $tru =  hasOrderedCharactersForward($sre_temp);
    if($tru){
     echo $sre_temp.'<br>';
    }
}
function powerSet($array) {
    // add the empty set
    $results = array(array());
    foreach ($array as $element) {
        foreach ($results as $combination) {
            $results[] = array_merge(array($element), $combination);
        }
    }
    return $results;
}
function hasOrderedCharactersForward($str, $i = 2) {
      $alpha = 'abcdefghijklmnopqrstuvwxyz';
      $len = strlen($str);
      for($j=0; $j <= $len - $i; $j++){
          if(strrpos($alpha, substr($str, $j, $i)) !== false){
              return true;
          }
      }
      return false;
}

我认为powerSet()无法像我想象的那样工作。即使它也应该显示为" xyz"作为组合,但不是;

请看一下,如果适合您的需求,请使用它。

$aarr = ['x','y','z','t','m','n','x','y','z'];
$subsets = [];
$i=0;
#here we merge all chars to sub-sequence 
foreach($aarr as $k=>$v){
    $subsets[$i][]=$v;
    if(isset($aarr[$k+1]) && ord($v)+1!==ord($aarr[$k+1])){
        $i++;
    }
}
$subsets = array_map(function($a){ return implode('',$a);},$subsets);
print_r($subsets);

结果:

array([0] => xyz [1] => t [2] => mn [3] => xyz)

获得第一个和最后一个值:

#get first
$first=null;
$i=0;
do{
    if(strlen($subsets[$i])>1){#find sequence
        $first = $subsets[$i];
    }
    $i++;
}while(!$first && isset($subsets[$i]));
#get last
$last=null;
$i=count($subsets)-1;
do{
    if(strlen($subsets[$i])>1){#find sequence
        $last = $subsets[$i];
    }
    $i--;
}while(!$last && isset($subsets[$i]));
print "$first, $last";

结果:

xyz,xyz

最新更新