>  기사  >  백엔드 개발  >  PHP 소스 코드 1에 대한 간략한 논의: 분해 및 내포 함수

PHP 소스 코드 1에 대한 간략한 논의: 분해 및 내포 함수

不言
不言원래의
2018-06-28 16:26:061715검색

이 글은 주로 PHP 소스 코드 1:explode 및 implode 함수에 대한 간략한 설명을 소개합니다. 이제 필요한 친구들이 참고할 수 있도록 공유하겠습니다.

#🎜🎜 # 1. 분해 및 파열 함수

array 분해(문자열 구분자, 문자열 문자열 [, int 제한])
이 함수는 문자열로 구성된 배열을 반환합니다. 각 요소는 문자열의 하위 문자열로 표시됩니다. 문자 문자열 구분 기호는 경계점으로 구분됩니다. 제한 매개변수가 설정된 경우 반환된 배열에는 최대 제한 요소가 포함되며 마지막 요소에는 문자열의 나머지 부분이 포함됩니다.

이 함수의 시간 복잡도는 O(strlen(separator) * strlen(string))입니다.

구현 과정은 기본적으로 문자열 문자열을 순회하여 구분 기호와 비교하는 것입니다. 동일하다면 해시 테이블을 작성하고 문자열 포인터를 새 위치(즉, 각 구분 기호의 오른쪽)로 이동합니다.

또한 제한이 있는 경우에는 특별한 처리가 있습니다. 0보다 작습니다

이 함수의 구현은 주로 php_memnstr 함수에 의존합니다. php.h 파일에서 해당 정의를 볼 수 있습니다.
#define php_memnstr zend_memnstr
실제 함수는 zend_memnstr입니다. 이는 Zend/zend_operators.h 파일에 있습니다. 217행에서 그 정의를 볼 수 있습니다. 구현은 주로 while 루프와 두 개의 C 언어 함수 memchr 및 memcmp

string implode(문자열 접착제, 배열)입니다. 조각)

This 이 함수는 글루 문자열로 연결된 조각 배열의 요소를 포함하는 문자열을 반환합니다.
이 함수는 배열을 매개변수로, 배열과 문자열을 매개변수로 사용할 수 있으며, 문자열과 배열의 순서는 프로그램의 각 상황에 따라 변경될 수 있습니다. # 🎜🎜#

if (argc == 1) {
                            if (Z_TYPE_PP(arg1) != IS_ARRAY) {                            //              只有一个参数并且还不是数组
                                          php_error_docref(NULL TSRMLS_CC, E_WARNING, "Argument must be an array");
                                          return;
                            } 
                            MAKE_STD_ZVAL(delim);#define _IMPL_EMPTY ""
                            ZVAL_STRINGL(delim, _IMPL_EMPTY, sizeof(_IMPL_EMPTY) - 1, 0); 
                            SEPARATE_ZVAL(arg1);
                            arr = *arg1;
              } else {              //              两个参数
                            if (Z_TYPE_PP(arg1) == IS_ARRAY) {              //              如果每一个参数是数组
                                          arr = *arg1;
                                          convert_to_string_ex(arg2);
                                          delim = *arg2;
                            } else if (Z_TYPE_PP(arg2) == IS_ARRAY) {              //              如果第二个参数是数组
                                          arr = *arg2;
                                          convert_to_string_ex(arg1);
                                          delim = *arg1;
                            } else {
                                          php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid arguments passed");
                                          return;
                            }
              }

결국 배열은 arr에 할당되고 구분된 문자열은 delim에 할당되며 누락된 문자열은 ""로 설정됩니다.

#🎜🎜 #은 순회 배열이고, 문자열을 연결하는 과정은 바로 smart_str 관련 함수를 이 과정에서 사용하고(자세한 내용은 여기를 클릭하세요), 유형별로 서로 다른 연결 작업을 수행합니다(숫자인 경우 숫자 문자열로 변환해야 하는데, 이는 smart_str에 있습니다. )

위 내용은 모두의 학습에 도움이 되기를 바랍니다. 내용이 있으니 PHP 중국어 홈페이지를 주목해주세요!

관련 권장 사항:

PHP에서 strtr 함수의 이상한 동작에 대한 설명

# 🎜🎜#PHP 소스코드의 HashTable 분석에 대하여

위 내용은 PHP 소스 코드 1에 대한 간략한 논의: 분해 및 내포 함수의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.