PHP-манипулирование строкой внутри строки - PullRequest
2 голосов
/ 02 января 2011

У меня есть строка:

ABCDEFGHIJK

И у меня есть два массива позиций в этой строке, в которые я хочу вставить разные вещи.

Array
(
    [0] => 0
    [1] => 5
)

Array
(
    [0] => 7
    [1] => 9
)

Что если бы я решил добавить символ # и символ =, то получилось бы:

#ABCDE=FG#HI=JK

Есть ли способ, которым я могу сделать это без сложного набора substr?

Кроме того, # и = должны быть переменными любой длины, а не одним символом.

Ответы [ 3 ]

2 голосов
/ 02 января 2011

Вы можете использовать строку как массив

$str = "ABCDEFGH";
$characters = preg_split('//', $str, -1);

И после этого вы array_splice вставите '#' или '=' в позицию, заданную массивом
Верните массив обратноСтрока сделана:

$str = implode("",$str);
0 голосов
/ 02 января 2011

Для этого есть простая функция: substr_replace.Но чтобы это работало, вам придется структурировать ваш массив по-другому (который в любом случае будет более структурированным), например:

$replacement = array(
    0 => '#', 
    5 => '=', 
    7 => '#', 
    9 => '='
);

Затем отсортировать массив по убыванию ключей, используя krsort:

krsort($replacement);

И тогда вам просто нужно перебрать массив:

$str = "ABCDEFGHIJK";

foreach($replacement as $position => $rep) {
    $str = substr_replace($str, $rep, $position, 0);
}

echo $str; // prints #ABCDE=FG#HI=JK

Это работает путем вставки замен, начиная с конца строки.И он будет работать с любой замещающей строкой без определения длины этой строки.

Работает DEMO

0 голосов
/ 02 января 2011

Это работает для любого количества символов (я использую «#a» и «= b» в качестве последовательности символов):

function array_insert($array,$pos,$val)
{
    $array2 = array_splice($array,$pos);
    $array[] = $val;
    $array = array_merge($array,$array2);

    return $array;
}
$s = "ABCDEFGHIJK";
$arr = str_split($s);
$arr_add1 = array(0=>0, 1=>5);
$arr_add2 = array(0=>7, 1=>9);
$char1 = '#a';
$char2 = '=b';
$arr = array_insert($arr, $arr_add1[0], $char1);
$arr = array_insert($arr, $arr_add1[1] + strlen($char1), $char2);
$arr = array_insert($arr, $arr_add2[0]+ strlen($char1)+ strlen($char2), $char1);
$arr = array_insert($arr, $arr_add2[1]+ strlen($char1)+ strlen($char2) + strlen($char1), $char2);
$s = implode("", $arr);
print_r($s);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...