Inhaltsverzeichnis
【PHP源码阅读】explode和implode函数,explodeimplode
explode
参数说明
运行示例
 
explode执行步骤
源码解读
implode
implode执行步骤
小结
Heim Backend-Entwicklung PHP-Tutorial 【PHP源码阅读】explode和implode函数,explodeimplode_PHP教程

【PHP源码阅读】explode和implode函数,explodeimplode_PHP教程

Jul 12, 2016 am 08:51 AM
explode

【PHP源码阅读】explode和implode函数,explodeimplode

explode和implode函数主要用作字符串和数组间转换的操作,比如获取一段参数后根据某个字符分割字符串,或者将一个数组的结果使用一个字符合并成一个字符串输出。在PHP中经常会用到这两个函数,因此有必要了解一下其原理。

explode

<p>array explode ( string $delimiter, string $string, [ , $limit ] )</p>
Nach dem Login kopieren

函数返回由字符串组成的数组,每个元素都是string的一个子串,被字符串$delimiter作为边界点分割出来。

参数说明

limit

如果设置了$limit,且为正数,则返回的数组最多包含$limit个元素,最后的那个元素将包含$string的剩余部分。

如果$limit是负数,则返回除了最后的-$limit个元素外的所有元素。

如果$limit是0,则会被当做1。

delimiter

如果$delimiter为空,则函数返回FALSE。如果delimiter不在string中,且$limit为负数,则返回空数组。

运行示例

<span>$str</span> = 'hello,world,heiheihei,php';
Nach dem Login kopieren

先来看看不设置limit的情况

<span>$arr</span> = <span>explode</span>(',', <span>$str</span><span>);
</span><span>print_r</span>(<span>$arr</span>);
Nach dem Login kopieren

limit为正数时,limit设为1,最多返回1个元素。

<span>$arr</span> = <span>explode</span>(',', <span>$str</span>, 1<span>);
</span><span>print_r</span>(<span>$arr</span>);
Nach dem Login kopieren

limit为负数,limit为-1,返回最后的1个元素外的所有元素。

<span>$arr</span> = <span>explode</span>(',', <span>$str</span>, -1<span>);
</span><span>print_r</span>(<span>$arr</span>);
Nach dem Login kopieren

limit为0,当作1处理。

<span>$arr</span> = <span>explode</span>(',', <span>$str</span>, 0<span>);
</span><span>print_r</span>(<span>$arr</span>);
Nach dem Login kopieren

explode执行步骤

<p>1、接收参数,处理参数为空的情况</p>
<p>2、创建函数中使用的局部变量</p>
<p>3、根据limit的值调用不同的函数分隔字符串</p>
Nach dem Login kopieren

explode函数的核心实现是php_explode函数,下面是该函数的执行流程图:

【PHP源码阅读】explode和implode函数,explodeimplode_PHP教程 if (p2 == NULL) { // 找不到分隔符,直接返回整个字符串 add_next_index_stringl(return_value, p1, Z_STRLEN_P(str), 1); } else { do { // 将p1添加到return_value数组中 add_next_index_stringl(return_value, p1, p2 - p1, 1); p1 = p2 + Z_STRLEN_P(delim); } while ((p2 = php_memnstr(p1, Z_STRVAL_P(delim), Z_STRLEN_P(delim), endp)) != NULL && --limit > 1); // 将最后一个值添加到return_value if (p1 <= endp) add_next_index_stringl(return_value, p1, endp-p1, 1); }

源码解读

sizeof("") == 0。sizeof有两种用法,sizeof(typename)sizeof(expression),当参数为typename是,即类型名称,sizeof返回类型对应对象的大小;当参数为表达式时,sizeof计算表达式的返回类型对应对象的大小。此处,""是表达式,sizeof计算编译时编译器分配给""的空间,此时要算上\0的长度,因此是1,而strlen函数不会计算\0。

如果不设置limit,limit的默认值是LONG_MAX。在php.h文件中,LONG_MAX定义为2147483647L。

在实现里面,如果limit大于1,则调用php_explode函数;如果limit小于0,则调用php_explode_negative_limit函数;如果limit等于0,则被当做1处理,此时调用add_index_stringl函数将str添加到数组return_value中。

在查找分隔符delimiter时,调用了php_memnstr函数
php_memnstr(Z_STRVAL_P(str), Z_STRVAL_P(delim), Z_STRLEN_P(delim), endp);
而php_memnstr是zend_memnstr的宏定义,zend_memnstr实现里面,因此实际上是调用了C里面的memchr来查找字符delimiter。

找到分隔符的位置之后,就调用add_next_index_stringl函数将分隔得到的字符串插入到返回数组里。

implode

<p>string implode ( string $glue, array $pieces )<br />string implode ( array $pieces )</p>



Nach dem Login kopieren

将一个一维数组的值转换为字符串

参数说明

implode函数可以接收两种参数顺序。另外,如果第一个参数为数组而第二个参数为空,则第二个参数为默认值''。此函数可以看作是explode的逆向过程。

当然,使用文档规定的顺序可避免混淆。

运行示例

<span>$arr</span> = <span>array</span>('hello', 'world');
Nach dem Login kopieren

按照文档顺序参数

<span>$str</span> = <span>implode</span>('-&lsquo;, $arr);// 输出"hello-world"
Nach dem Login kopieren

第一个参数为数组

<span>$str</span> = <span>implode</span>(<span>$arr</span><span>); // 输出"helloworld"
</span><span>$str</span> = <span>implode</span>(<span>$arr</span>, '-'); // 输出"hello-world"
Nach dem Login kopieren

implode执行步骤

<p>1、接收参数并赋值<br />2、如果第二个参数为空,则判断第一个参数的类型是否为数组,如果不是,则报错。否则,则使用""对glue赋值,使用其作为连接符。<br />3、如果第二个参数不为空,那么,如果第一个参数是数组类型,则将第二个参数转换成字符串类型;否则,如果第二个参数是数组类型,则将第一个参数转换成字符串类型。<br />4、调用php_implode函数做字符串的连接。</p>



Nach dem Login kopieren

在implode函数设置完参数之后,底层就调用php_implode函数进行字符串连接,php_implode函数的执行流程图如下:

【PHP源码阅读】explode和implode函数,explodeimplode_PHP教程 // 遍历数组的每一个元素,判断其类型,然后调用smart_str_appendl函数将值追加到字符串中 while (zend_hash_get_current_data_ex(Z_ARRVAL_P(arr), (void **) &tmp, &pos) == SUCCESS) { switch ((*tmp)->type) { case IS_STRING: smart_str_appendl(&implstr, Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp)); break; case IS_LONG: { char stmp[MAX_LENGTH_OF_LONG + 1]; str_len = slprintf(stmp, sizeof(stmp), "%ld", Z_LVAL_PP(tmp)); smart_str_appendl(&implstr, stmp, str_len); } break; case IS_BOOL: if (Z_LVAL_PP(tmp) == 1) { smart_str_appendl(&implstr, "1", sizeof("1")-1); } break; case IS_NULL: break; case IS_DOUBLE: { char *stmp; str_len = spprintf(&stmp, 0, "%.*G", (int) EG(precision), Z_DVAL_PP(tmp)); smart_str_appendl(&implstr, stmp, str_len); efree(stmp); } break; case IS_OBJECT: { int copy; zval expr; zend_make_printable_zval(*tmp, &expr, &copy); smart_str_appendl(&implstr, Z_STRVAL(expr), Z_STRLEN(expr)); if (copy) { zval_dtor(&expr); } } break; default: tmp_val = **tmp; zval_copy_ctor(&tmp_val); convert_to_string(&tmp_val); smart_str_appendl(&implstr, Z_STRVAL(tmp_val), Z_STRLEN(tmp_val)); zval_dtor(&tmp_val); break; } // 添加glue字符 if (++i != numelems) { smart_str_appendl(&implstr, Z_STRVAL_P(delim), Z_STRLEN_P(delim)); } zend_hash_move_forward_ex(Z_ARRVAL_P(arr), &pos); } // 在尾部添加结束字符0 smart_str_0(&implstr);

 

源码解读

php_implode会逐个获取数组里面的内容,然后判断每个元素的类型,再做必要的数据类型转换之后,调用smart_str_appendl函数将值追加到返回的字符串后面。最后,还要在字符串后面加上结束符,这是个必须的操作,以后编程时也应注意。

smart_str_appendl是函数smart_str_appendl_ex的宏定义,该函数调用了memcpy做字符串的复制。

小结

原创文章,文笔有限,才疏学浅,文中若有不正之处,万望告知。

暂且写这么多吧,还有更多的优化和PHP源码中常用的函数,将会在以后的源码阅读中慢慢讲述。

如果本文对你有帮助,请点下推荐吧,谢谢^_^

 

最后,我在github有对PHP源码更详细的注解。感兴趣的可以围观一下,给个star。PHP5.4源码注解。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1128118.htmlTechArticle【PHP源码阅读】explode和implode函数,explodeimplode explode和implode函数主要用作字符串和数组间转换的操作,比如获取一段参数后根据某个字符分...
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So verwenden Sie die PHP-Explosionsfunktion und beheben Fehler So verwenden Sie die PHP-Explosionsfunktion und beheben Fehler Mar 10, 2024 am 09:18 AM

Die Explosionsfunktion in PHP ist eine Funktion zum Aufteilen einer Zeichenfolge in ein Array. Sie ist sehr verbreitet und flexibel. Bei der Verwendung der Explosionsfunktion treten häufig Fehler und Probleme auf. In diesem Artikel wird die grundlegende Verwendung der Explosionsfunktion vorgestellt und einige Methoden zur Lösung der Fehlerberichte bereitgestellt. 1. Grundlegende Verwendung der Explosionsfunktion In PHP lautet die grundlegende Syntax der Explosionsfunktion wie folgt: explosion(string$separator,string$stri

Häufige Fehler und Lösungen bei der Verwendung der Explosionsfunktion in PHP Häufige Fehler und Lösungen bei der Verwendung der Explosionsfunktion in PHP Mar 11, 2024 am 08:33 AM

Titel: Häufige Fehler und Lösungen bei der Verwendung der Explosionsfunktion in PHP In PHP ist die Explosionsfunktion eine häufige Funktion, die zum Aufteilen eines Strings in ein Array verwendet wird. Allerdings können einige häufige Fehler aufgrund unsachgemäßer Verwendung oder eines falschen Datenformats auftreten. In diesem Artikel werden die Probleme analysiert, die bei der Verwendung der Explosionsfunktion auftreten können, und Lösungen sowie spezifische Codebeispiele bereitgestellt. Fehler 1: Der Trennzeichenparameter wird nicht übergeben. Bei der Verwendung der Explosionsfunktion besteht einer der häufigsten Fehler darin, dass der Trennzeichenparameter nicht übergeben wird.

Teilen und verschmelzen Sie Zeichenfolgen mit den Funktionen „Explodieren' und „Implodieren'. Teilen und verschmelzen Sie Zeichenfolgen mit den Funktionen „Explodieren' und „Implodieren'. Jun 15, 2023 pm 08:42 PM

Bei der PHP-Programmierung ist die Verarbeitung von Strings ein häufig erforderlicher Vorgang. Unter diesen sind das Teilen und Zusammenführen von Zeichenfolgen zwei häufige Anforderungen. Um diese Vorgänge bequemer durchführen zu können, stellt PHP zwei sehr praktische Funktionen zur Verfügung, nämlich die Explode- und Implode-Funktion. In diesem Artikel werden die Verwendung dieser beiden Funktionen sowie einige praktische Fertigkeiten vorgestellt. 1. Die Explosionsfunktion Die Explosionsfunktion wird verwendet, um eine Zeichenfolge gemäß dem angegebenen Trennzeichen aufzuteilen und ein Array zurückzugeben. Sein Funktionsprototyp ist wie folgt: arra

Was soll ich tun, wenn PHP Explode einen Fehler meldet? Was soll ich tun, wenn PHP Explode einen Fehler meldet? Jan 18, 2023 am 10:13 AM

Lösung für den PHP-Explosionsfehler: 1. Suchen und öffnen Sie den fehlerhaften PHP-Code. 2. Suchen Sie den Explosionsfunktionsteil , verwenden Sie das Array einfach durch Kommas.

Teilen Sie den String mithilfe der PHP-Funktion „explode' in ein Array auf. Teilen Sie den String mithilfe der PHP-Funktion „explode' in ein Array auf. Jul 24, 2023 pm 11:09 PM

Verwenden Sie die PHP-Funktion „explode“, um einen String in ein Array aufzuteilen. Bei der PHP-Entwicklung kommt es häufig vor, dass Sie einen String entsprechend dem angegebenen Trennzeichen aufteilen müssen. Zu diesem Zeitpunkt können wir die in PHP integrierte Funktion „explode“ verwenden, um einen String in ein Array zu konvertieren. In diesem Artikel wird erläutert, wie Sie mit der Funktion „explode“ eine Zeichenfolge aufteilen, und es werden relevante Codebeispiele gegeben. Die grundlegende Syntax der Funktion „explode“ lautet wie folgt: arrayexplode(

So verwenden Sie die Explosionsfunktion, um eine Zeichenfolge in PHP zu teilen So verwenden Sie die Explosionsfunktion, um eine Zeichenfolge in PHP zu teilen Jun 26, 2023 pm 12:03 PM

In der PHP-Sprache gibt es viele Grundfunktionen, die uns helfen können, Strings schnell und effizient zu verarbeiten. Unter diesen ist die Explosionsfunktion eine sehr praktische Funktion zum Aufteilen von Zeichenfolgen. Es kann eine Zeichenfolge gemäß dem angegebenen Trennzeichen in Arrays aufteilen und dann flexiblere Zeichenfolgenoperationen ausführen. In diesem Artikel stellen wir vor, wie Sie die Explosionsfunktion zum Teilen von Zeichenfolgen in PHP verwenden. 1. Das Format der Explosionsfunktion in der PHP-Sprache ist wie folgt: explosion(separa

Verwenden Sie die PHP-Funktion „explode', um einen String in mehrere Teilstrings aufzuteilen Verwenden Sie die PHP-Funktion „explode', um einen String in mehrere Teilstrings aufzuteilen Jul 25, 2023 pm 06:29 PM

Verwenden Sie die PHP-Funktion „explode“, um einen String in mehrere Teilstrings aufzuteilen. Bei der PHP-Programmierung kommt es häufig vor, dass wir einen String in mehrere Teilstrings aufteilen müssen. Derzeit bietet PHP eine sehr praktische Funktion „Explodieren“, mit deren Hilfe wir diese Funktion einfach implementieren können. Die Syntax der Funktion „explode“ lautet wie folgt: arrayexplode(string$delimiter,string$string[,in

Was ist die Funktion explosion() in PHP? Was ist die Funktion explosion() in PHP? Sep 04, 2023 pm 01:01 PM

In diesem Artikel erfahren Sie, wie Sie die Funktion PHPExplode() verwenden, eine vordefinierte integrierte PHP-Funktion. Die Explosionsfunktion wird verwendet, um eine Zeichenfolge in kleinere Inhalte aufzuteilen. Mit der Explosionsfunktion in PHP können wir eine Zeichenfolge durch Umbrechen in kleinere Inhalte aufteilen. Diese Art von Trennzeichen wird als Trennzeichen bezeichnet. Syntax explosion(Trennzeichen, Zeichenfolge, Anzahl der Elemente ) Die Parameterexplosionsfunktion akzeptiert drei Parameter, von denen zwei obligatorisch und einer optional ist. Lassen Sie uns diese drei Parameter besprechen. Dieses Zeichen gibt den kritischen Punkt oder Punkt an, an dem die Zeichenfolge geteilt wird, d. h. wann immer dieses Zeichen in einer Zeichenfolge gefunden wird , symbolisiert es das Ende eines Elements im Array und den Anfang eines anderen Elements in der String-Eingabezeichenfolge.

See all articles