mirror of
https://github.com/php/php-src.git
synced 2024-11-23 18:04:36 +08:00
ZEND_HASH_FOREACH_* usage
This commit is contained in:
parent
c1e900e4c0
commit
277f8f6391
@ -2177,7 +2177,6 @@ PHP_FUNCTION(array_slice)
|
|||||||
pos; /* Current position in the array */
|
pos; /* Current position in the array */
|
||||||
zend_string *string_key;
|
zend_string *string_key;
|
||||||
ulong num_key;
|
ulong num_key;
|
||||||
HashPosition hpos;
|
|
||||||
|
|
||||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "al|zb", &input, &offset, &z_length, &preserve_keys) == FAILURE) {
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "al|zb", &input, &offset, &z_length, &preserve_keys) == FAILURE) {
|
||||||
return;
|
return;
|
||||||
@ -2218,33 +2217,28 @@ PHP_FUNCTION(array_slice)
|
|||||||
|
|
||||||
/* Start at the beginning and go until we hit offset */
|
/* Start at the beginning and go until we hit offset */
|
||||||
pos = 0;
|
pos = 0;
|
||||||
zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(input), &hpos);
|
ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(input), num_key, string_key, entry) {
|
||||||
while (pos < offset && (entry = zend_hash_get_current_data_ex(Z_ARRVAL_P(input), &hpos)) != NULL) {
|
|
||||||
pos++;
|
pos++;
|
||||||
zend_hash_move_forward_ex(Z_ARRVAL_P(input), &hpos);
|
if (pos <= offset) {
|
||||||
}
|
continue;
|
||||||
|
}
|
||||||
/* Copy elements from input array to the one that's returned */
|
if (pos > offset + length) {
|
||||||
while (pos < offset + length && (entry = zend_hash_get_current_data_ex(Z_ARRVAL_P(input), &hpos)) != NULL) {
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Copy elements from input array to the one that's returned */
|
||||||
zval_add_ref(entry);
|
zval_add_ref(entry);
|
||||||
|
|
||||||
switch (zend_hash_get_current_key_ex(Z_ARRVAL_P(input), &string_key, &num_key, 0, &hpos)) {
|
if (string_key) {
|
||||||
case HASH_KEY_IS_STRING:
|
zend_hash_update(Z_ARRVAL_P(return_value), string_key, entry);
|
||||||
zend_hash_update(Z_ARRVAL_P(return_value), string_key, entry);
|
} else {
|
||||||
break;
|
if (preserve_keys) {
|
||||||
|
zend_hash_index_update(Z_ARRVAL_P(return_value), num_key, entry);
|
||||||
case HASH_KEY_IS_LONG:
|
} else {
|
||||||
if (preserve_keys) {
|
zend_hash_next_index_insert(Z_ARRVAL_P(return_value), entry);
|
||||||
zend_hash_index_update(Z_ARRVAL_P(return_value), num_key, entry);
|
}
|
||||||
} else {
|
|
||||||
zend_hash_next_index_insert(Z_ARRVAL_P(return_value), entry);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
pos++;
|
} ZEND_HASH_FOREACH_END();
|
||||||
zend_hash_move_forward_ex(Z_ARRVAL_P(input), &hpos);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
|
@ -3816,8 +3816,6 @@ static void php_str_replace_in_subject(zval *search, zval *replace, zval *subjec
|
|||||||
/* Duplicate subject string for repeated replacement */
|
/* Duplicate subject string for repeated replacement */
|
||||||
ZVAL_DUP(result, subject);
|
ZVAL_DUP(result, subject);
|
||||||
|
|
||||||
zend_hash_internal_pointer_reset(Z_ARRVAL_P(search));
|
|
||||||
|
|
||||||
if (Z_TYPE_P(replace) == IS_ARRAY) {
|
if (Z_TYPE_P(replace) == IS_ARRAY) {
|
||||||
zend_hash_internal_pointer_reset(Z_ARRVAL_P(replace));
|
zend_hash_internal_pointer_reset(Z_ARRVAL_P(replace));
|
||||||
} else {
|
} else {
|
||||||
@ -3827,12 +3825,11 @@ static void php_str_replace_in_subject(zval *search, zval *replace, zval *subjec
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* For each entry in the search array, get the entry */
|
/* For each entry in the search array, get the entry */
|
||||||
while ((search_entry = zend_hash_get_current_data(Z_ARRVAL_P(search))) != NULL) {
|
ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(search), search_entry) {
|
||||||
/* Make sure we're dealing with strings. */
|
/* Make sure we're dealing with strings. */
|
||||||
SEPARATE_ZVAL(search_entry);
|
SEPARATE_ZVAL(search_entry);
|
||||||
convert_to_string(search_entry);
|
convert_to_string(search_entry);
|
||||||
if (Z_STRLEN_P(search_entry) == 0) {
|
if (Z_STRLEN_P(search_entry) == 0) {
|
||||||
zend_hash_move_forward(Z_ARRVAL_P(search));
|
|
||||||
if (Z_TYPE_P(replace) == IS_ARRAY) {
|
if (Z_TYPE_P(replace) == IS_ARRAY) {
|
||||||
zend_hash_move_forward(Z_ARRVAL_P(replace));
|
zend_hash_move_forward(Z_ARRVAL_P(replace));
|
||||||
}
|
}
|
||||||
@ -3881,9 +3878,7 @@ static void php_str_replace_in_subject(zval *search, zval *replace, zval *subjec
|
|||||||
zval_ptr_dtor(&tmp_subject);
|
zval_ptr_dtor(&tmp_subject);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
} ZEND_HASH_FOREACH_END();
|
||||||
zend_hash_move_forward(Z_ARRVAL_P(search));
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if (Z_STRLEN_P(search) == 1) {
|
if (Z_STRLEN_P(search) == 1) {
|
||||||
php_char_to_str_ex(Z_STRVAL_P(subject),
|
php_char_to_str_ex(Z_STRVAL_P(subject),
|
||||||
|
Loading…
Reference in New Issue
Block a user