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