Der folgende Code richtig passt:die Spiele einer Regex in ein mehrdimensionales Array
letter 'c' followed by digit
letter 'c' followed by digit dash digit
digit may be followed by an other digit enclosed in square parentheses []
und erstellt ein Array wie dies zu erwarten:
Array
(
[0] => Array
(
[start] => 4
[end]=> 8
)
[1] => Array
(
[start] => 2
[end]=>
)
[2] => Array
(
[start] => 3
[end] => 5
)
[3] => Array
(
[start] => 6[2]
[end] =>
)
[4] => Array
(
[start] => 8[4]
[end] => 10
)
[5] => Array
(
[start] => 14
[end] => 21[5]
)
)
Code:
$str = "a2c4-8|a6c2,c3-5,c6[2],c8[4]-10,c14-21[5]";
$re = "~c(?<start>\d+(?:\[\d+])?)(?:-(?<end>(?&start)?))?~";
$myarray = explode("|",$str);
foreach ($myarray as $my) {
preg_match_all($re, $my, $matches);
$res = array_map(function($ms, $me) {
return array("start" => $ms, "end" => $me);
}, $matches["start"], $matches["end"]);
}
echo "<pre>";
print_r($res);
echo "</pre>";
Nun möchte Ich mag zu eine anderen key
mit dem Wert der Ziffer hinzufügen nach den a
. So zum Beispiel angesichts der oben $str
$str = "a2c4-8|a6c2,c3-5,c6[2],c8[4]-10,c14-21[5]".
die a
Werte sind: 2
und 6
und das Ergebnis Array erwartet würde die folgende sein. Beachten Sie, dass6
für jede c
wiederholt wird.
Array
(
[0] => Array
(
[a] => 2
[start] => 4
[end]=> 8
)
[1] => Array
(
[a] => 6
[start] => 2
[end]=>
)
[2] => Array
(
[a] => 6
[start] => 3
[end] => 5
)
[3] => Array
(
[a] => 6
[start] => 6[2]
[end] =>
)
[4] => Array
(
[a] => 6
[start] => 8[4]
[end] => 10
)
[5] => Array
(
[a] => 6
[start] => 14
[end] => 21[5]
)
)
Da jeder Array-Schlüssel eindeutig sein muss, ist es nicht möglich. –
Ok. Ich habs. Ich habe ein bisschen meine Frage geändert. Bitte schauen Sie sich den editierten Post und das erwartete Ergebnis an. – Nicero
Was passiert, wenn "a" nie definiert wird oder wenn "a" nach dem ersten "c" auftritt? Sind diese Situationen möglich? –