在数组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
没有后续字符,因此他将被单独留下。我没有删除任何内容,我只是合并可以合并的内容。下一步将得到第一个和最后一个。