MR.Internet
MR.Internet

Reputation: 645

php substring Issue

I have the following string:

$str = "ABACADAF";

I am using the following code:

$first2 = substr($str, 0, 2);

I want to get the following output:

output => `AB,AC,AD,AF`

(Every two characters separated by comma)

But the result I'm getting is not correct.

I checked the php manual but that is not helping, is there some foreach loop to iterate through all the string characters?

Upvotes: 1

Views: 257

Answers (6)

AbsoluteƵERØ
AbsoluteƵERØ

Reputation: 7870

Here's a function that you can use to output from a foreach. We're finding two capital letter matches and putting them into an array, then we implode that array() to make a string.

<?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";    
    }
?>

Output

AB,AC,AD,AF
AC,AB,AF,AC
AA,AB,AF,AD
AC,AC,AD,AF

If you're running a lot of them (millions of lines) you can use this function instead. It's much quicker.

function splitter($string){
    $newstring = substr(chunk_split($string, 2, ','), 0, -1);
    return $newstring;
}

Upvotes: 1

Alma Do
Alma Do

Reputation: 37365

You are looking for str_split function. You can do like this:

$sResult = join(',', str_split($sData, 2));

Alternatively, you can do it via regex:

$sResult = preg_replace('/(..)(?!$)/', '$1,', $sData);

Upvotes: 3

eatonphil
eatonphil

Reputation: 13682

You could do it like this or recursively as well.

<?php
for ($i=0; $i< strlen($str); $i=$i+3)
{
    $str = substr($str,i,2).",".substr($str,3);
}
echo $str;
?>

I personally prefer the recursive implementation:

<?php

    function add_comma($str)
    {
        return substr($str, 0, 2,).','.add_comma(subtr($str,3));
    }
    echo add_comma($str);

?>

Upvotes: 1

Hassan Sardar
Hassan Sardar

Reputation: 4523

Here is the solution and Same output of your problem: I personally tested it :

<?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;     

?>

Upvotes: 0

Shade
Shade

Reputation: 785

While this is doable with a for loop, it is cleaner (and maybe faster), and more strait-forward in TomUnite's answer.

But since you asked...
With a for loop you could do it like this:

$withCommas = substr($string, 0, 2);

for($i=0; $i < strlen($string); $i += 2){
    $withCommas+= "," . substr($string, $i, $i+2);
}

Upvotes: 0

Thomas Lomas
Thomas Lomas

Reputation: 1553

Not tested, but should be something along these lines:

<?php

$string = "ABACADAF";
$split = str_split($string, 2);
$implode = implode(",", $split);

echo $implode;

?>

Upvotes: 4

Related Questions