2011-01-02 8 views
2

Ich habe string:PHP String-Manipulation, in der Zeichenfolge

ABCDEFGHIJK 

Und ich habe zwei Arrays von Positionen in dieser Zeichenfolge, die ich verschiedene Dinge einfügen wollen.

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

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

Welche, wenn ich den # Charakter und die = Zeichen hinzufügen entschieden, würden Sie folgendes Ergebnis:

#ABCDE=FG#HI=JK 

Gibt es eine Möglichkeit, dies ohne einen komplizierten Satz von substr tun kann?

Außerdem müssen # und = Variablen sein, die beliebig lang sein können, nicht nur ein Zeichen.

Antwort

2

Sie String als Array verwenden können

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

Und Sie danach array_splice '#' oder '=' einfügen von Array
Return das Array zurück zu String gegeben Position erfolgt durch:

$str = implode("",$str); 
+0

Sie haben mit 'array_splice' vorsichtig sein. Z.B. Nach dem Einfügen der ersten zwei Zeichen zeigt der Index "7" nicht mehr auf "G", sondern auf "F". Wie würdest du das lösen? –

+0

Ja, Sie müssen einen Iterationsindex haben und in jeder 'array_splice' diesen Index zur gewünschten Position hinzufügen. Steuere es einfach mit if..else basierend auf max (insertion_index) wobei insertion_index auf bereits gemachten Einfügungen basiert. (hoffe nur, ich habe keine verdrehten Worte: D) –

+0

Ja, ich habe es;) –

0

Dies funktioniert für eine beliebige Anzahl von Zeichen (ich bin mit „#a“ und „= b“ als die Zeichenfolgen):

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); 
0

Es gibt eine einfache Funktion dafür: substr_replace. Aber für diese arbeiten, würden Sie Sie Array-Struktur müssen anders (die mehr strukturiert ohnehin würde), zB:

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

Dann sortieren Sie die Array nach Schlüsseln absteigend, mit krsort:

krsort($replacement); 

Und dann müssen Sie nur über das Array:

Dies funktioniert durch Einfügen der Ersetzungen ab dem Ende der Zeichenfolge. Und es würde mit jeder Ersetzungszeichenfolge funktionieren, ohne die Länge dieser Zeichenfolge bestimmen zu müssen.

Arbeiten DEMO

Verwandte Themen