PHP: возможно ли изменить символ в строке с более чем 1 символом - PullRequest
0 голосов
/ 17 марта 2012

Просто интересно, можно ли заменить символ в строке более чем на 1 символ.Вот моя неудачная попытка:

<?
$string = abcde;
echo "character 2: ". $string[2] . "\n";
$string[2] = "X";
echo "character 2: ". $string[2] . "\n";
$string[2] = "moreThanOneChar";
echo "character 2: ". $string[2] . "\n";
echo "whole string: $string";
?>

вывод:

character 2: c
character 2: X
character 2: m      
whole string: abmde   // <-- This should be abmoreThanOneCharde

http://codepad.org/e2dDkH37

Ответы [ 3 ]

2 голосов
/ 17 марта 2012
function replaceInString($str, $pos, $substring)
{
     $part1 = substr($str, 0, -$pos);
     $part2 = substr($str, -$pos + 1);
     return $part1 . $substring . $part2;
}
1 голос
/ 17 марта 2012

С документы :

Строка в PHP реализована в виде массива байтов и целого числа, указывающего длину буфера.

Таким образом, хотя строку можно рассматривать как массив символов, она отличается от других типов массивов, где каждый элемент может быть изменен на новый тип данных.Каждый элемент «строкового массива» всегда будет 1-байтовым символом.

Когда вы пытаетесь сказать PHP «сделать этот третий символ строкой других символов», PHP отвечает, говоря: «Хорошо, но яЯ собираюсь использовать только первый символ из новой строки ".

Редактировать

Некоторые уточнения после просмотра других ответов.Я понял, что ваш вопрос означает, что вы хотите продолжать получать доступ к символам по местоположению после изменения.

Например:

$string = 'abcde';
echo $string[2];  //echoes c
$string[2] = 'fghi';
echo $string[2]:  //echoes fghi

Это просто невозможно, как вы описываете.

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

1 голос
/ 17 марта 2012

Вы можете решить эту проблему, используя механизм замены регулярного выражения (регулярное выражение):

$string = preg_replace('/X/', 'moreThanOneChar', $string);

Примечание; однако, это заменит каждый экземпляр 'X' на 'moreThanOneChar'. Если вы хотите ограничить это только в первый раз, вы можете передать ограничение в качестве четвертого параметра:

$string = preg_replace('/X/', 'moreThanOneChar', $string, 1);

Это можно легко расширить, чтобы заменить фразы:

$string = 'Hello, man!';
$string = preg_replace('/man/', 'person', $string);

echo $string;

Выход:

Hello, person!

Просмотрите команду preg_replace для получения дополнительной информации:

http://php.net/manual/en/function.preg-replace.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...