多くのデータのペアを含む単一の文字列を処理しています。;
各ペアは記号で区切られています。各ペアには、符号で区切られた数値と文字列が含まれます=
。
処理は簡単だと思っていましたが、ペアの半分の文字列に=
and;
記号が含まれている可能性があり、単純な分割が信頼できないものになっていることがわかりました。
問題のある文字列の例を次に示します。
123=one; two;45=three=four;6=five;
これを正しく処理するには、次のような配列に分割する必要があります。
'123', 'one; two'
'45', 'three=four'
'6', 'five'
私は少し行き止まりにいるので、どんな助けも大歓迎です。
アップデート:
助けてくれたみんなに感謝します。これが私がこれまでのところです:
$input = '123=east; 456=west';
// split matches into array
preg_match_all('~(\d+)=(.*?);(?=\s*(?:\d|$))~', $input, $matches);
$newArray = array();
// extract the relevant data
for ($i = 0; $i < count($matches[2]); $i++) {
$type = $matches[2][$i];
$price = $matches[1][$i];
// add each key-value pair to the new array
$newArray[$i] = array(
'type' => "$type",
'price' => "$price"
);
}
どの出力
Array
(
[0] => Array
(
[type] => east
[price] => 123
)
)
末尾にセミコロンがないため、2 番目の項目がありません。修正方法がわかりません。
ペアの数値部分に小数点が含まれることがあり、最後の文字列ペアの後にセミコロンがないことに気付きました。運があまりないので、ヒントをいただければ幸いです。
これは、最初の質問で見逃していたことを考慮して更新された文字列です (申し訳ありません)。
12.30=one; two;45=three=four;600.00=five