как поменять два символа строки? - PullRequest
0 голосов
/ 12 июля 2019

Я хочу изменить два символа строки в PHP.Например, от 50378f до 8f3750, пожалуйста, помогите мне.

$str= User::where('id',$userid)->pluck('card_id');
$num = strrev($number);
echo $num;

Эта функция работает очень хорошо, но я хочу поменять местами два символа, а не один.

Моя функция дает мнепример вывода: 12345 до 543210 но я хочу это как 103254.

Ответы [ 4 ]

2 голосов
/ 12 июля 2019

Вы можете попробовать это:

$originalString = '23242526';
$arrayWith2CharsPerElement = str_split($originalString, 2);
$arrayWithReversedKeys = array_reverse($arrayWith2CharsPerElement);
$newStringInReverseOrder = implode($arrayWithReversedKeys);

echo $newStringInReverseOrder; //will print 26252423

Редактировать: изменил подход к работе с нечетными строками

$string = '121314152';
$countDown = strlen($string);
$substrLength = 2;
$reverseString = '';
while ($countDown > 0) {
    $startPosition = $countDown -2;
    if ($countDown == 1) {
        $startPosition = 0;
        $substrLength = 1;
    }
    $reverseString .= substr($string, $startPosition, $substrLength);
    $countDown -= 2;
}

echo $reverseString; //will print 524131211
0 голосов
/ 12 июля 2019

Вы можете использовать функцию ниже для обратной строки двумя слотами.

function reverseByTwoCharacters($string)
{
    $stringReversed = "";
    if (!empty($string)) {
        $stringLength = strlen($string);
        if ($stringLength % 2 == 0) {
            $splittedString = str_split($string, 2);
        } else {
            $splittedString = str_split(substr($string, 1), 2);
            array_unshift($splittedString, $string[0]);
        }
        $reverseString  = array_reverse($splittedString);
        $stringReversed = implode($reverseString);
    }
    return $stringReversed;
}
$string = "1234567890";
echo reverseByTwoCharacters($string);

// Output
9078563412
0 голосов
/ 12 июля 2019

Я переписал функцию, вы можете определить, какую длину символа вы хотите изменить, изменив $ noOfChar.

Пример, если вы установите $ noOfChar = 3, результат 12345 будет 1004325.

function strReverse($string) {
    $newString = "";

    $noOfChar = 2;
    $remain = strlen($string) % $noOfChar;

    $string = str_repeat("0", $remain) . $string;
    $segment = "";
    for($pos = 0; $pos < strlen($string); $pos++) {
        $segment = $segment . substr($string, $pos, 1);

        if ((($pos + 1) % $noOfChar) == 0) {
            $newString .= strrev($segment);
            $segment = "";
        }
    }

    if ($segment != "") $newString .= strrev($segment);
    return $newString;
}

echo strReverse('12345');
0 голосов
/ 12 июля 2019

Вы можете попробовать

function strReverse($string) {
    $newString = "";

    if ((strlen($string) % 2) != 0) $string = "0". $string;

    for($pos = 0; $pos < strlen($string); $pos++) {
        $chr = substr($string, $pos, 1);
        if (($pos % 2) == 0) {
            $tmp = $chr;
        } else {
            $newString .= $chr . $tmp;
            $tmp = "";
        }
    }

    if ($tmp != "") $newString .= $tmp;
    return $newString;
}

echo strReverse('12345'); // result 103254
...