PHP では、文字列を配列に変換することは非常に一般的な操作です。通常、文字列分割関数 explode()
を使用して、指定した文字を区切り文字として使用して文字列を分割し、分割された部分文字列を配列に入れることができます。
たとえば、次のコードは文字列 1,2,3,4,5
をカンマに従って分割し、配列に格納します。実際の開発では奇妙な問題に遭遇するかもしれません。たとえば、場合によっては、カンマ区切りの文字列を正常に分割できず、配列要素の正しい数と値を取得できなくなることがあります。
では、これらの問題はどのようにして起こるのでしょうか?以下で詳しく説明しましょう。
問題の原因
文字列にこれらの特殊文字が含まれている場合は、
explode() を使用して分割するときにさらに注意する必要があります。ここでは具体的な例をいくつか示します。 マルチバイト文字
マルチバイト文字で構成される文字列を分割しようとすると、いくつかの問題が発生する可能性があります。場合によっては、特定の区切り文字の間に余分な文字が自動的に追加され、区切りエラーが発生することがあります。
以下は例です:
$str = "1,2,3,4,5"; $arr = explode(",", $str); print_r($arr); // 输出 Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 )
ご覧のとおり、マルチバイト文字で構成される文字列を分割するとエラーが発生します。これは、PHP がマルチバイト文字を処理する場合、処理前にエンコーディングをバイナリ形式に変換する必要があるためです。変換されたバイナリ文字と元の文字の間に違いがある可能性があり、その結果、不正確なセグメンテーション結果が得られます。
特殊文字
以下は例です。
$str = "中,文,汉,字"; $arr = explode(",", $str); print_r($arr); // 输出 Array ( [0] => 中 [1] => 文í [2] => åŒ [3] => å )
この例では、文字列に復帰と改行が含まれているため、`,
` で分割しようとすると問題が発生します。具体的には、分割文字の間にスペースが追加されたり、オペレーティング システムやテキスト エディタによってキャリッジ リターンやライン フィードの処理方法が異なるなどです。
したがって、この場合、正規表現を使用して、より正確なマッチングとセグメント化を試みることができます。
解決策
preg_split 関数
を使用すると、正規表現の一致と分割を簡単に実行できます。以下は、preg_split()
を使用した分割の例です。 <pre class='brush:php;toolbar:false;'>$str = "a,
,b,
,c";
$arr = explode(",
", $str);
print_r($arr); // 输出 Array ( [0] => a [1] => b [2] => c )</pre>
ご覧のとおり、
を使用してカンマ区切りの文字列を分割した後、 get 結果は前の例と一致します。
関数は正規表現の一致と分割に基づいているため、さまざまな文字列の内容や区切り文字のシナリオに適用できます。 mb_split 関数
を使用して分割操作を実行することです。 preg_split()
とは異なり、mb_split()
は分割に正規表現に依存しません。 次は、
関数を使用した分割の例です。 <pre class='brush:php;toolbar:false;'>$str = "a,
,b,
,c";
$arr = preg_split('/,
/', $str);
print_r($arr); // 输出 Array ( [0] => a [1] => b [2] => c )</pre>
ご覧のとおり、
セクション文字を使用します。 、結果は正しいです。 概要
これらの問題を回避するには、PHP 組み込み関数
preg_split() または mb_split()
を使用して文字列分割操作を実行してみてください。どちらの方法でも、カンマ区切りの文字列が正しく分割されない問題を解決でき、さまざまなシナリオに適したさまざまな利点が得られます。
以上がPHPのカンマ区切り配列は分離できませんの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。