Add `reverse()` and `reversed()`.
This commit is contained in:
parent
3b168358b7
commit
80afae478b
|
@ -1255,12 +1255,34 @@ PHP_METHOD(Collection, retainAll)
|
||||||
|
|
||||||
PHP_METHOD(Collection, reverse)
|
PHP_METHOD(Collection, reverse)
|
||||||
{
|
{
|
||||||
|
zend_array* current = COLLECTION_FETCH_CURRENT();
|
||||||
|
ARRAY_NEW_EX(reversed, current);
|
||||||
|
ZEND_HASH_REVERSE_FOREACH_BUCKET(current, Bucket* bucket)
|
||||||
|
ADDREF_IF_REFCOUNTED(bucket->val);
|
||||||
|
if (bucket->key)
|
||||||
|
zend_hash_add(reversed, bucket->key, &bucket->val);
|
||||||
|
else
|
||||||
|
zend_hash_next_index_insert(reversed, &bucket->val);
|
||||||
|
ZEND_HASH_FOREACH_END();
|
||||||
|
if (GC_REFCOUNT(current) > 1)
|
||||||
|
GC_DELREF(current);
|
||||||
|
else
|
||||||
|
zend_array_destroy(current);
|
||||||
|
COLLECTION_FETCH_CURRENT() = reversed;
|
||||||
}
|
}
|
||||||
|
|
||||||
PHP_METHOD(Collection, reversed)
|
PHP_METHOD(Collection, reversed)
|
||||||
{
|
{
|
||||||
|
zend_array* current = COLLECTION_FETCH_CURRENT();
|
||||||
|
ARRAY_NEW_EX(reversed, current);
|
||||||
|
ZEND_HASH_REVERSE_FOREACH_BUCKET(current, Bucket* bucket)
|
||||||
|
ADDREF_IF_REFCOUNTED(bucket->val);
|
||||||
|
if (bucket->key)
|
||||||
|
zend_hash_add(reversed, bucket->key, &bucket->val);
|
||||||
|
else
|
||||||
|
zend_hash_next_index_insert(reversed, &bucket->val);
|
||||||
|
ZEND_HASH_FOREACH_END();
|
||||||
|
RETVAL_NEW_COLLECTION(reversed);
|
||||||
}
|
}
|
||||||
|
|
||||||
PHP_METHOD(Collection, shuffle)
|
PHP_METHOD(Collection, shuffle)
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
--TEST--
|
||||||
|
Test Collection::reverse() and Collection::reversed().
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
$array = ['a', 'b', 'c', 'd', 'e'];
|
||||||
|
$collection = Collection::init($array);
|
||||||
|
$collection->reverse();
|
||||||
|
if ($collection->toArray() != array_reverse($array))
|
||||||
|
echo 'Collection::reverse() failed.', PHP_EOL;
|
||||||
|
if ($collection->reversed()->toArray() != $array)
|
||||||
|
echo 'Collection::reversed() failed.', PHP_EOL;
|
||||||
|
?>
|
||||||
|
--EXPECT--
|
Reference in New Issue