我有以下字符串:
$str = "ABACADAF";
我使用以下代码:
$first2 = substr($str, 0, 2);
我想获得以下输出:
output => `AB,AC,AD,AF`
(每两个字符用逗号分隔)
但我得到的结果不正确。
我检查了php手册,但这没有帮助,是否有一些foreach循环遍历所有字符串字符?
答案 0 :(得分:4)
未经测试,但应该是以下几点:
<?php
$string = "ABACADAF";
$split = str_split($string, 2);
$implode = implode(",", $split);
echo $implode;
?>
答案 1 :(得分:3)
您正在寻找str_split功能。你可以这样做:
$sResult = join(',', str_split($sData, 2));
或者,您可以通过正则表达式执行此操作:
$sResult = preg_replace('/(..)(?!$)/', '$1,', $sData);
答案 2 :(得分:1)
您可以这样做或递归。
<?php
for ($i=0; $i< strlen($str); $i=$i+3)
{
$str = substr($str,i,2).",".substr($str,3);
}
echo $str;
?>
我个人更喜欢递归实现:
<?php
function add_comma($str)
{
return substr($str, 0, 2,).','.add_comma(subtr($str,3));
}
echo add_comma($str);
?>
答案 3 :(得分:1)
这是一个可以用来从foreach输出的函数。我们找到两个大写字母匹配并将它们放入一个数组中,然后我们内爆array()
来创建一个字符串。
<?php
function splitter($string){
preg_match_all('/[A-Z]{2}/', $string, $matches);
$newstring = implode(',',$matches[0]);
return $newstring;
}
$strings = array("ABACADAF","ACABAFAC","AAABAFAD","ACACADAF");
foreach($strings as $string){
echo splitter($string)."\n";
}
?>
<强>输出强>
AB,AC,AD,AF
AC,AB,AF,AC
AA,AB,AF,AD
AC,AC,AD,AF
如果您运行了很多(数百万行),您可以使用此功能。它快得多。
function splitter($string){
$newstring = substr(chunk_split($string, 2, ','), 0, -1);
return $newstring;
}
答案 4 :(得分:0)
虽然这对于for
循环是可行的,但它更干净(也许更快),并且在TomUnite的答案中更加直接。
但是你问了...... 使用for循环,您可以这样做:
$withCommas = substr($string, 0, 2);
for($i=0; $i < strlen($string); $i += 2){
$withCommas+= "," . substr($string, $i, $i+2);
}
答案 5 :(得分:0)
以下是您的问题的解决方案和相同输出: 我亲自测试过它:
<?php
$str = "ABACADAF";
$first = substr($str, 0, 2);
$second = substr($str, 2, 2);
$third = substr($str, 4, 2);
$fourth = substr($str, 6, 2);
echo $output = $first.",".$second.",".$third.",".$fourth;
?>