Поворот строки N раз в PHP - PullRequest
2 голосов
/ 11 марта 2010

Я ищу способ повернуть строку влево N раз. Вот несколько примеров:

Пусть строка будет abcdef

  • если я поверну его 1 раз, когда я хочу bcdefa
  • если я поверну его 2 раз, когда я хочу cdefab
  • если я поверну его 3 раз, когда я хочу defabc
  • .
  • .
  • Если я поверну строку ее раз я должен вернуть исходная строка.

Ответы [ 7 ]

16 голосов
/ 11 марта 2010
 $rotated = substr($str, $n) . substr($str, 0, $n);
3 голосов
/ 11 марта 2010

Вот один вариант, который допускает произвольное смещение влево и вправо, независимо от длины входной строки:

function str_shift($str, $len) {
    $len = $len % strlen($str);
    return substr($str, $len) . substr($str, 0, $len);
}

echo str_shift('abcdef', -2);  // efabcd
echo str_shift('abcdef', 2);   // cdefab
echo str_shift('abcdef', 11);  // fabcde
2 голосов
/ 11 марта 2010
function rotate_string ($str, $n)
{
    while ($n > 0)
    {
        $str = substr($str, 1) . substr($str, 0, 1);
        $n--;
    }

    return $str;
}
1 голос
/ 19 мая 2012
function rotate_string($str) {
    for ($i=1; $i<strlen($str)+1;$i++) {
        @$string .= substr($str , strlen($str)-$i , 1);
    }
    return $string;
}

echo rotate_string("string"); //gnirts
1 голос
/ 11 марта 2010

Для этого нет стандартной функции, но ее легко реализовать.

function rotate_left($s) {
  return substr($s, 1) . $s[0];
}

function rotate_right($s) {
  return substr($s, -1) . substr($s, 0, -1);
}

Вы можете расширить это, добавив необязательный параметр для количества вращающихся символов.

0 голосов
/ 05 февраля 2014

Вы также можете получить N повернутых строк, как это.

$str = "Vijaysinh";
$arr1 = str_split($str);
$rotated = array();
$i=0;


    foreach($arr1 as $a){
        $t = $arr1[$i];
        unset($arr1[$i]);
        $rotated[] = $t.implode($arr1);
        $arr1[$i] = $t;
        $i++; 
    }
    echo "<pre>";print_r($rotated);exit;
0 голосов
/ 11 марта 2010

Используйте этот код

<?php
    $str = "helloworld" ;
    $res = string_function($str,3) ;
    print_r ( $res) ;
    function string_function ( $str , $count )
    {
    $arr = str_split ( $str );
    for ( $i=0; $i<$count ; $i++ )
    {
      $element = array_pop ( $arr ) ;
      array_unshift ( $arr, $element ) ;
    }
    $result=( implode ( "",$arr )) ;
    return $result;
    }
    ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...