Description
This PHP extension, written in C, provides a set of useful functional-style operations on PHP arrays, which makes array manipulation simple and scalable.
ext-collections alternatives and similar libraries
Based on the "Data Structure and Storage" category.
Alternatively, view ext-collections alternatives based on common mentions on social networks and blogs.
-
Porter
:lipstick: Durable and asynchronous data imports for consuming data at scale and publishing testable SDKs. -
Cake Collection
[READ-ONLY] Collection library in CakePHP. This repo is a split of the main code that can be found in https://github.com/cakephp/cakephp -
CRUDlex
CRUDlex is an easy to use CRUD generator for Symfony 4 and Silex 2 which is great for auto generated admin pages
InfluxDB - Purpose built for real-time analytics at any scale.
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of ext-collections or a related project?
README
ext-collections
1. Introduction
This PHP extension provides a set of useful and convenient operations on PHP arrays, which makes working with arrays simple and scalable.
Method names and functionalities are inspired by Kotlin.Collections, having a slightly different style than that of Laravel Collections.
Requires PHP version >= 7.1 and < 8.0 (master branch).
1.1 Example
Here is a simple example on how to work with arrays gracefully using this extension.
$employees = [
['name' => 'Alice', 'gender' => 'female', 'age' => 35],
['name' => 'Bob', 'gender' => 'male', 'age' => 29],
['name' => 'David', 'gender' => 'male', 'age' => 40],
['name' => 'Benjamin', 'gender' => 'male', 'age' => 32]
];
// Trying to get an array of names of male employees,
// sorted by the descending order of their age.
$names = Collection::init($employees)
->filter(function ($value) {
return $value['gender'] == 'male';
})
->sortedByDescending(function ($value) {
return $value['age'];
})
->map(function ($value) {
return $value['name'];
})
->toArray();
// You got $names == ['David', 'Benjamin', 'Bob'].
2. Getting Started
2.1 Installation
Like other PHP extensions, ext-collections can be built and installed with a few commands:
phpize
./configure
make
sudo make install
Include it in your PHP configuration file to enable this extension:
extension=collections.so
Building on Windows is not as convenient, however, pre-built binaries for Windows are provided in the releases. If you want to build it yourself, follow the official PHP wiki.
2.2 API Reference
See [stubs](stubs/) directory for signatures of all classes and methods of this extension, with PHPDoc. They can also serve as IDE helper.
2.3 PHP-style Access
The Collection
class implements ArrayAccess
and Countable
interface internally, you can treat an instance of Collection
as an ArrayObject
.
- The
isset()
,unset()
keywords can be used on elements ofCollection
. - Elements can be accessed via property or bracket expression.
empty()
,count()
can be used on instance ofCollection
.- Elements can be traversed via
foreach()
keyword.
3. Notes
- The
Collection::xxxTo()
methods will preserve the original key-value pairs of destinationCollection
when keys collide. - Some methods of
Collection
involves comparing two of its elements, which accepts$flags
as one of its arguments. When these methods are being invoked, make sure all elements are of the same type (numeric/string/others), otherwise you're likely to get a segfault.
3.1 Copy-on-write Mechanism
Class Collection
does not introduce new data structures internally. Instead, it only holds a pointer to a zend_array
, and all its methods works directly on top of zend_array
. Which means conversion between Collection
and array
does not involve copying, until write operation is performed on one of the duplicates.
$foo = ['a', 'b']; // arr0: refcount = 1
$bar = Collection::init($foo); // arr0: refcount = 2, no copying of either `zend_array` or its elements
echo $bar->containsValue('a'); // arr0: refcount = 2, read operation, no copying
$bar->shuffle(); // arr0: refcount = 1, arr1: refcount = 1, write operation, `zend_array` is separated
$baz = $bar->toArray(); // arr0: refcount = 1, arr1: refcount = 2, no copying
*Note that all licence references and agreements mentioned in the ext-collections README section above
are relevant to that project's source code only.