Hello Benjamin,

Am 27.10.2017 um 14:12 schrieb Benjamin Coutu:
> Hello everyone,
> 
> Please consider these two statements:
> 
> substr($string, 0, $length);
> array_slice($array, 0, $length, true);
> 
> Currently, with substr(), if $offset is zero and $length is smaller or equal 
> to the original string length we just increase the reference count of the 
> original string and return it via RETURN_STR_COPY.
> In that case we completely save the allocation of a new string.

the optimization actually only returns the same string if the supplied
length is the length of the string, see:
https://lxr.room11.org/xref/php-src%40master/ext/standard/string.c#2436

> Now, array_slice() could be optimized similarly, but currently (unless the 
> resulting array is expected to be empty) we always create a new array no 
> matter if we actually have to.
> The same mechanism as used with substr() could be applied to array_slice(), 
> given that $offset is zero and of course only if $preserve_keys is true.
> 
> A patch would look like this:
> 
> if (length <= num_in && offset == 0 && preserve_keys) {
>   /* Copy the original array */
>   ZVAL_COPY(return_value, input);
>   return;
> }

So the array_slice optimization should only do the some, otherwise the
returned array would be longer than desired.

Greets,
Dennis

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to