Justin
Justin

Reputation: 45350

Return every other character from string in PHP

Assume I have a string variable:

$str = "abcdefghijklmn";

What is the best way in PHP to write a function to start at the end of the string, and return every other character? The output from the example should be:

nljhfdb

Here is what I have so far:

    $str = "abcdefghijklmn";
    $pieces = str_split(strrev($str), 1);

    $return = null;
    for($i = 0; $i < sizeof($pieces); $i++) {
            if($i % 2 === 0) {
                    $return .= $pieces[$i];
            }
    }

    echo $return;

Upvotes: 1

Views: 1898

Answers (7)

2cent
2cent

Reputation: 211

preg_replace('/(.)./', '$1', strrev($str));

Where preg_replace replaces every two characters of the reversed string with the first of the two.

Upvotes: 0

You need to split the string using str_split to store it in an array. Now loop through the array and compare the keys to do a modulo operation.

<?php
$str = "abcdefghijklmn";
$nstr="";
foreach(str_split(strrev($str)) as $k=>$v)
{
    if($k%2==0){
        $nstr.= $v;
    }
}
echo $nstr; //"prints" nljhfdb

Upvotes: 2

Hassan
Hassan

Reputation: 742

loop forward, append backward

<?php

    $res = '';
    $str = "abcdefghijklmn";

    for ($i = 0; $i < strlen($str); $i++)  {
        if(($i - 1) % 2 == 0)
              $res = $str[$i] . $res;
    }

    echo $res;

?>

Upvotes: 0

dkasipovic
dkasipovic

Reputation: 6120

How about something like this:

$str = str_split("abcdefghijklmn");

echo join("",
    array_reverse(
        array_filter($str, function($var) {
                global $str;
                return(array_search($var,$str) & 1);
            }
        )
    )
);

Upvotes: -1

Dora
Dora

Reputation: 6970

reverse the string then do something like

foreach($array as $key => $value)
{
  if($key%2 != 0) //The key is uneven, skip
    continue;
 //do your stuff
}

Upvotes: 1

ascx
ascx

Reputation: 473

I'd go for the same as Shankar did, though this is another approach for the loop.

<?php
    $str = "abcdefghijklmn";
    for($i=0;$i<strlen($str);$i++){
        $res .= (($i-1) % 2 == 0 ? $str[$i] : "");
    }
    print(strrev($res)); // Result: nljhfdb
?>

Upvotes: 1

hsz
hsz

Reputation: 152216

Just try with:

$input  = 'abcdefghijklmn';
$output = '';

for ($i = strlen($input) - 1; $i >= 0; $i -= 2) {
  $output .= $input[$i];
}

Output:

string 'nljhfdb' (length=7)

Upvotes: 7

Related Questions