從PHP源代碼here中,函數explode按給定字符串從左到右的順序排列。
這裏是代碼本身:
PHPAPI void php_explode(const zend_string *delim, zend_string *str, zval *return_value, zend_long limit){
char *p1 = ZSTR_VAL(str);
char *endp = ZSTR_VAL(str) + ZSTR_LEN(str);
char *p2 = (char *) php_memnstr(ZSTR_VAL(str), ZSTR_VAL(delim), ZSTR_LEN(delim), endp);
zval tmp;
if (p2 == NULL) {
ZVAL_STR_COPY(&tmp, str);
zend_hash_next_index_insert_new(Z_ARRVAL_P(return_value), &tmp);
} else {
do {
size_t l = p2 - p1;
if (l == 0) {
ZVAL_EMPTY_STRING(&tmp);
} else if (l == 1) {
ZVAL_INTERNED_STR(&tmp, ZSTR_CHAR((zend_uchar)(*p1)));
} else {
ZVAL_STRINGL(&tmp, p1, p2 - p1);
}
zend_hash_next_index_insert_new(Z_ARRVAL_P(return_value), &tmp);
p1 = p2 + ZSTR_LEN(delim);
p2 = (char *) php_memnstr(p1, ZSTR_VAL(delim), ZSTR_LEN(delim), endp);
} while (p2 != NULL && --limit > 1);
if (p1 <= endp) {
ZVAL_STRINGL(&tmp, p1, endp - p1);
zend_hash_next_index_insert_new(Z_ARRVAL_P(return_value), &tmp);
}
}
}
這似乎隱含如此不言而喻。 – deceze
@deceze我同意,但我以前曾被這樣的事情燒過。我只希望文檔能夠明確地這樣說。 – Birrel