2015-05-09 6 views
-6

Я хочу иметь короткий и простой способ заменить символ:
От A до B, B до C, Z до A, ... в PHP.Преобразование символов; как от A до B, от B до C,

Я уже попытался это:

$pwd = "Abc"; 
for($char = ord('A'); $char <= ord('Z'); $char++) { 
    $newc = $char+1; 
    if($newc > 90) 
    $newc = 65; 
    $pwd = str_replace(chr($char), chr($newc), $pwd); 
    $pwd = str_replace(chr($char+32), chr($newc+32), $pwd); 
} 
echo $pwd; 

Но когда я использую его я получаю только "Ааа" ...

+1

Мы не являемся службами написания кода. Пожалуйста, покажите нам свою работу/попытки, которые вы сделали, и где вы застряли. – Rizier123

+0

Можете ли вы показать, что вы пробовали? – rapvelopment

+0

Я добавил его к основному сообщению. :) – LuucDev

ответ

0
$str = 'a'; 
echo ++$str; // prints 'b' 
+0

Для каждого персонажа, конечно. И я действительно не хочу вводить эту строку для каждого персонажа ... ^^ – LuucDev

0

Это должно работать для вас:

Здесь я просто str_split() строку в массив, а затем пройдите через каждый символ с array_map(). Там я проверяю, является ли она строчной или строчной буквой.

Если да, я просто возвращаю символ приращения, и если он перейдет zZ, я просто возвращаю aA.

В конце я просто implode() массив снова в строку.

<?php 

    $str = "Aac"; 

    $str = implode("", array_map(function($v){ 
     if(ord($v) >= 65 && ord($v) <= 90) 
      return (++$v > 90 ? char(65) : $v); 
     elseif(ord($v) >= 97 && ord($v) <= 122) 
      return (++$v > 122 ? char(97) : $v); 
     else 
      return $v; 
    }, str_split($str))); 

    echo $str; 

?> 

выход:

Bbd 
0

Вот простой цикл, который делает работу:

// A function to replace uppercase characters in a string with 
// the next letter in the alphabet 

function replace($str) { 
    $len = strlen($str); 

    for ($i = 0; $i < $len; ++$i) { 
     // Check if the current character is an uppercase letter 

     if (ctype_upper($str[$i])) { 
      if ($str[$i] == 'Z') { 
       // If it is a "Z", simply make it an "A" 

       $str[$i] = 'A'; 
      } 
      else { 
       // If it is anything else, just get the next 
       // character from the ASCII table 

       $str[$i] = chr(ord($str[$i]) + 1); 
      } 
     } 
    } 

    return $str; 
} 

Вы можете использовать его как это:

echo replace('HELLO, YOU! ABCDEFGH...XYZ'); 

Этот выход будет IFMMP, ZPV! BCDEFGHI...YZA как и ожидалось.

Вы можете узнать больше о ctype_upper здесь: http://php.net/ctype-upper - это в основном функция проверки, является ли строка или символ прописными или нет.

chr и ord просто конвертировать ASCII-код в символ и наоборот. При необходимости ознакомьтесь с официальной документацией: http://php.net/ord и http://php.net/chr.

Смежные вопросы