Hello,
array_shift()
currently reindexes the array after shifting one element.
The reindexing has quite some impact on it's performance. I would like
to suggest an extra parameter to array_shift()
which can be used to
prevent reindexing.
From a few quick (and sloppy!) tests I get these results:
reset($array); list($key, $value) = each($array); unset($array[$key]);
is ~50-150 times faster than array_shift()
.
Calling array_reverse()
and using array_pop()
is ~2000-5000 times faster.
If you agree this would be an useful addition I will create a patch.
-- Jille
What about replacing the existing array with array_slice?
David
Hello,
array_shift()
currently reindexes the array after shifting one element. The reindexing has quite some impact on it's performance. I would like to suggest an extra parameter toarray_shift()
which can be used to prevent reindexing.From a few quick (and sloppy!) tests I get these results:
reset($array); list($key, $value) = each($array); unset($array[$key]);
is ~50-150 times faster thanarray_shift()
.
Callingarray_reverse()
and usingarray_pop()
is ~2000-5000 times faster.If you agree this would be an useful addition I will create a patch.
-- Jille
It seems 7-8 times slower than array_shift()
and that is even without a
way to fetch the first value.
I tried
$array = array_slice($array, 1)
and
$array = array_slice($array, 1, NULL, true);
-- Jille
Op 12-07-12 14:39, David Muir schreef:
What about replacing the existing array with array_slice?
David
Hello,
array_shift()
currently reindexes the array after shifting one element. The reindexing has quite some impact on it's performance. I would like to suggest an extra parameter toarray_shift()
which can be used to prevent reindexing.From a few quick (and sloppy!) tests I get these results:
reset($array); list($key, $value) = each($array); unset($array[$key]);
is ~50-150 times faster thanarray_shift()
.
Callingarray_reverse()
and usingarray_pop()
is ~2000-5000 times faster.If you agree this would be an useful addition I will create a patch.
-- Jille
Hello,
array_shift()
currently reindexes the array after shifting one element.
The reindexing has quite some impact on it's performance. I would like
to suggest an extra parameter toarray_shift()
which can be used to
prevent reindexing.From a few quick (and sloppy!) tests I get these results:
reset($array); list($key, $value) = each($array); unset($array[$key]);
is ~50-150 times faster thanarray_shift()
.
Callingarray_reverse()
and usingarray_pop()
is ~2000-5000 times faster.If you agree this would be an useful addition I will create a patch.
I haven't checked this, but is the difference only due to the re-hashing
or also due to the fact that that array_shift()
is taking the array by
reference and therefore making a copy during the call if other
cow-references (refcount>1, isref=0) exist?
johanne
Op 12-07-12 15:18, Johannes Schlüter schreef:
Hello,
array_shift()
currently reindexes the array after shifting one element.
The reindexing has quite some impact on it's performance. I would like
to suggest an extra parameter toarray_shift()
which can be used to
prevent reindexing.From a few quick (and sloppy!) tests I get these results:
reset($array); list($key, $value) = each($array); unset($array[$key]);
is ~50-150 times faster thanarray_shift()
.
Callingarray_reverse()
and usingarray_pop()
is ~2000-5000 times faster.If you agree this would be an useful addition I will create a patch.
I haven't checked this, but is the difference only due to the re-hashing
or also due to the fact that thatarray_shift()
is taking the array by
reference and therefore making a copy during the call if other
cow-references (refcount>1, isref=0) exist?
If I disable the reindexing codearray_shift()
becomes ~300 times faster.
-- Jille