Dans PHP, la fonction exploit () est un outil de traitement de chaîne couramment utilisé, qui peut diviser une chaîne en un tableau en fonction du séparateur spécifié. Cependant, en usage pratique, le comportement d' Exploit () peut confondre les débutants lorsque les délimiteurs apparaissent en continu en chaînes. Cet article explorera cette situation en profondeur et présentera plusieurs approches correctes.
La syntaxe d' EXPLOIT () est la suivante:
<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>
Lorsque $ séparateur est le délimiteur, $ string est la chaîne à diviser et $ limite est un paramètre facultatif, indiquant le nombre maximum d'éléments contenus dans le tableau renvoyé.
Un exemple typique:
<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 pour ["apple", "banana", "orange"]</span></span><span>
</span></span>
Lorsque les délimiteurs apparaissent successivement, le comportement d' Exploit () est de les traiter comme plusieurs délimiteurs , chacun entraînant une chaîne vide insérée dans le réseau de résultats. Par exemple:
<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 pour ["apple", "", "banana", "", "", "orange"]</span></span><span>
</span></span>
On peut voir que deux virgules , sont interprétées comme un point d'insertion d'une valeur vide, et il en va de même pour trois virgules ,,,,,,,,,,,,,,,,, insérant respectivement deux cordes vides.
Ce comportement peut causer des problèmes lors du traitement des données d'entrée de l'utilisateur ou de format CSV, car vous ne pouvez pas vous attendre à ce que de nombreuses valeurs nulles apparaissent dans le tableau.
Le moyen le plus simple consiste à utiliser Array_Filter () pour supprimer les chaînes vides dans le tableau:
<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 pour ["apple", "banana", "orange"]</span></span><span>
</span></span>
Remarque: array_filter () supprimera toutes les "fausses valeurs", y compris "0" par défaut. Si vous souhaitez conserver "0" , vous devez passer dans une fonction de rappel personnalisée, comme indiqué dans l'exemple ci-dessus.
Si vous voulez que les séparateurs consécutifs soient considérés comme un ensemble (c'est-à-dire que plusieurs virgules sont traitées comme un séparateur), vous pouvez utiliser 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 pour ["apple", "banana", "orange"]</span></span><span>
</span></span>
De cette façon, peu importe le nombre de virgules consécutives, ils seront considérés comme un point de séparation.
Dans certains scénarios, vous ne voudrez peut-être que diviser les premières valeurs, et les autres sont réservés dans son ensemble, et vous pouvez utiliser le paramètre $ limite :
<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 pour ["apple", "", "banana,,,orange"]</span></span><span>
</span></span>
Expoit () est un outil de division de chaîne très utile dans PHP, mais lors de la rencontre de délimiteurs continus, son comportement peut ne pas correspondre aux attentes. Comprendre son mécanisme et choisir la méthode de traitement appropriée en fonction des besoins spécifiques de l'entreprise, tels que l'utilisation de array_filter () ou preg_split () , peut contrôler et nettoyer plus efficacement les données de chaîne et éviter les erreurs logiques.
La sélection raisonnablement des outils et la logique de traitement est une compétence de base que chaque développeur PHP devrait avoir.
Étiquettes associées:
explode