在数组php中查找第一个和最后一个匹配序列

在数组php中查找第一个和最后一个匹配序列,php,arrays,string,sorting,Php,Arrays,String,Sorting,我有一个数组来查找字母表序列,然后获取最后一个和第一个组合。我正在尝试这样的东西 $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 = hasOrderedCharactersForwar

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

$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;
}
$aarr=['x','y','z','t','m','n','x','y','z'];
$str=内爆(“”,$aarr);
$all_子集=功率集($aarr);
foreach($all_子集为$set){
$sre_temp=内爆(“”,$set);
$tru=hasOrderedCharactersForward($sre_temp);
如果($tru){
echo$sre_temp.“
”; } } 函数电源集($array){ //添加空集 $results=array(array()); foreach($array作为$element){ foreach($结果为$组合){ $results[]=数组合并(数组($element),$combination); } } 返回$results; } 函数hasOrderedCharactersForward($str,$i=2){ $alpha='abcdefghijklmnopqrstuvxyz'; $len=strlen($str);
对于($j=0;$j请看一看,如果它符合您的需要,请使用它

$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);
结果:

数组([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


所以,在本例中,您希望将
xyz
作为第一个和最后一个的结果?为什么“t”是there@AdeelGill在结果中,所有后续字符都合并到一个字符串中,
t
没有后续字符,因此他将被单独留下。我没有删除任何内容,我只是合并可以合并的内容。下一步将得到第一个和最后一个。