PHP字符串扩展
我有一个由许多字母组成的字符串,在某一点上,可以使用一个组中的一个字母,这是由[]中包含的字母表示的。我需要把这些字母展开成实际的字符串 由此:PHP字符串扩展,php,arrays,string,Php,Arrays,String,我有一个由许多字母组成的字符串,在某一点上,可以使用一个组中的一个字母,这是由[]中包含的字母表示的。我需要把这些字母展开成实际的字符串 由此: $str='ABCCDF[GH]IJJ[KLM]' 为此: $sub[0] = 'ABCCDFGIJJK'; $sub[1] = 'ABCCDFHIJJK'; $sub[2] = 'ABCCDFGIJJL'; $sub[3] = 'ABCCDFHIJJL'; $sub[4] = 'ABCCDFGIJJM'; $sub[5] = 'ABCCDFHIJJM
$str='ABCCDF[GH]IJJ[KLM]'
为此:
$sub[0] = 'ABCCDFGIJJK';
$sub[1] = 'ABCCDFHIJJK';
$sub[2] = 'ABCCDFGIJJL';
$sub[3] = 'ABCCDFHIJJL';
$sub[4] = 'ABCCDFGIJJM';
$sub[5] = 'ABCCDFHIJJM';
更新:
感谢@Barmar提供了非常有价值的建议
我的最终解决办法是:
$str = '[GH]DF[IK]TF[ADF]';
function parseString(string $str) : array
{
$i = 0;
$is_group = false;
$sub = array();
$chars = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY);
foreach ($chars as $key => $value)
{
if(ctype_alpha($value))
{
if($is_group){
$sub[$i][] = $value;
} else {
if(!isset($sub[$i][0])){
$sub[$i][0] = $value;
} else {
$sub[$i][0] .= $value;
}
}
} else {
$is_group = !$is_group;
++$i;
}
}
return $sub;
}
推荐的组合功能是(查看相关帖子):
将字符串转换为二维数组。括号外的部分变为单元素数组,而每个括号内的字符串变为单字符数组。因此,您的字符串将变成:
$array =
array(array('ABCCDF'),
array('G', 'H', 'I'),
array('IJJ'),
array('K', 'L', 'M'));
然后你只需要计算这些数组的所有组合;使用下面的答案之一。最后,将每个结果数组与内爆
连接起来,得到一个字符串数组
$combinations = combinations($array);
$sub = array_map('implode', $combinations);
将方括号中的字符串转换为数组。然后获取所有数组的组合。稍后您将如何处理
sub
s?也许仅仅在正则表达式上下文中使用$str
就可以复制@barmar,谢谢你的建议,但我并不完全清楚。您建议将字符串拆分为以下数组:$str[0]=“ABCCDF”$str[1]=“G”$str[2]=“H”$str[3]=“IJJ”$str[4]=“K”$str[5]=“L”$str[6]=“M”。。。然后进行排列?我想我可以做arrys,你能给我一些关于排列的建议吗?@user3783243我需要扩展的字符串来搜索这些字符串,例如,我想知道'DFIJ'
是否符合这个规则
$array =
array(array('ABCCDF'),
array('G', 'H', 'I'),
array('IJJ'),
array('K', 'L', 'M'));
$combinations = combinations($array);
$sub = array_map('implode', $combinations);