在php网站开发中,我们经常需要把一个字符串分割成数组,这时候我们经常会使用 php explode() 函数来帮我们实现。这篇文章我们主要来学学 explode() 函数是怎么工作的。
文件1:ext/standard/string.c (explode的源代码)
php_function(explode){char*str,*delim;int str_len =0, delim_len =0;long limit = long_max;/* no limit */ zval zdelim, zstr;if(zend_parse_parameters(zend_num_args() tsrmls_cc,ss|l,&delim,&delim_len,&str,&str_len,&limit)== failure){return;}if(delim_len ==0){ php_error_docref(null tsrmls_cc, e_warning,empty delimiter); return_false;}// 这里会开辟一个数组,用来存放分割后的数据 array_init(return_value);// 因为这个,我们用explode('|', '');成为了合法的if(str_len ==0){if(limit >=0){ add_next_index_stringl(return_value,,sizeof()-1,1);}return;}// 下面这两个是将原字串和分割符都构建成_zval_struct 结构,// zval_stringl会分配空间~~源代码随后贴出 zval_stringl(&zstr, str, str_len,0); zval_stringl(&zdelim, delim, delim_len,0);// limit值是explode中允许传递的explode的第三个参数,它允许正负if(limit >1){ php_explode(&zdelim,&zstr, return_value, limit);}elseif(limit 0){ php_explode_negative_limit(&zdelim,&zstr, return_value, limit);}else{ add_index_stringl(return_value,0, str, str_len,1);}}
文章摘自 php explode() 函数源码分析
