PHPでは、 exploit()関数は一般的に使用される文字列処理ツールであり、指定されたセパレーターに従って文字列を配列に分割できます。ただし、実際に使用すると、 exploit()の動作は、区切り文字が文字列に継続的に現れると初心者を混乱させる可能性があります。この記事では、この状況を詳細に調査し、いくつかの正しいアプローチを紹介します。
exploit()の構文は次のとおりです。
<span><span><span class="hljs-title function_ invoke__">explode</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$separator</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$string</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$limit</span></span><span> = PHP_INT_MAX): </span><span><span class="hljs-keyword">array</span></span><span>
</span></span>$セパレーターは区切り文字、 $ stringは分割する文字列であり、 $ limitはオプションのパラメーターであり、返された配列に含まれる要素の最大数を示します。
典型的な例:
<span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"apple,banana,orange"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">explode</span></span><span>(</span><span><span class="hljs-string">","</span></span><span>, </span><span><span class="hljs-variable">$str</span></span><span>);
</span><span><span class="hljs-comment">// $result のために ["apple", "banana", "orange"]</span></span><span>
</span></span>デリミターが連続して表示されると、 exploit()の動作はそれらを複数の区切り文字として扱うことであり、それぞれが結果アレイに空の文字列を挿入します。例えば:
<span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"apple,,banana,,,orange"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">explode</span></span><span>(</span><span><span class="hljs-string">","</span></span><span>, </span><span><span class="hljs-variable">$str</span></span><span>);
</span><span><span class="hljs-comment">// $result のために ["apple", "", "banana", "", "", "orange"]</span></span><span>
</span></span>2つのコンマは空の値の挿入点として解釈され、同じことが3つのコンマ、、、、、、、、、、、、、、、、、、、、、、、、、、ドリマスを挿入し、それぞれ2つの空の文字列を挿入していることがわかります。
この動作は、ユーザー入力またはCSV形式のデータを処理するときに問題を引き起こす可能性があります。これは、多くのnull値が配列に表示されるとは思わない場合があるためです。
最も簡単な方法は、array_filter()を使用して配列内の空の文字列を削除することです。
<span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"apple,,banana,,,orange"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_filter</span></span><span>(</span><span><span class="hljs-title function_ invoke__">explode</span></span><span>(</span><span><span class="hljs-string">","</span></span><span>, </span><span><span class="hljs-variable">$str</span></span><span>), function(</span><span><span class="hljs-variable">$item</span></span><span>) {
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$item</span></span><span> !== </span><span><span class="hljs-string">""</span></span><span>;
});
</span><span><span class="hljs-comment">// $result のために ["apple", "banana", "orange"]</span></span><span>
</span></span>注: array_filter()は、デフォルトで「0」を含むすべての「false値」を削除します。 「0」を保持したい場合は、上記の例に示すように、カスタムコールバック関数を渡す必要があります。
連続したセパレーターを全体として見たい場合(つまり、複数のコンマがセパレーターとして扱われます)、 preg_split()を使用できます。
<span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"apple,,banana,,,orange"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_split</span></span><span>(</span><span><span class="hljs-string">"/,+/"</span></span><span>, </span><span><span class="hljs-variable">$str</span></span><span>);
</span><span><span class="hljs-comment">// $result のために ["apple", "banana", "orange"]</span></span><span>
</span></span>このように、何回連続したコンマがあっても、それらは分離点と見なされます。
いくつかのシナリオでは、最初の数の値のみを分割したい場合があり、残りは全体として予約されており、 $ limeパラメーターを使用できます。
<span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"apple,,banana,,,orange"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">explode</span></span><span>(</span><span><span class="hljs-string">","</span></span><span>, </span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>);
</span><span><span class="hljs-comment">// $result のために ["apple", "", "banana,,,orange"]</span></span><span>
</span></span>exploit()はPHPで非常に有用な文字列分割ツールですが、連続デリミターに遭遇する場合、その動作は期待と一致しない場合があります。そのメカニズムを理解し、 array_filter()やpreg_split()を使用するなど、特定のビジネスニーズに応じて適切な処理方法を選択すると、文字列データをより効果的に制御およびクリーニングし、論理エラーを回避できます。
合理的にツールと処理ロジックを選択することは、すべてのPHP開発者が持つべき基本的なスキルです。
関連タグ:
explode