A collection of array conversions and manipulators.

A collection of array conversions and manipulators.

README

Looking for maintainers, I no longer do much if any PHP dev, I have moved on, mostly work in dotnet core, node.js & golang these days. If anyone is keen to take over these projects, get in touch – [email protected]

The Array Gear

Build Status
Latest Stable Version
Total Downloads
License

A collection of array conversions and manipulators.
There are 2 APIs:

  • One procedural based using name spaced functions / static method calls.
  • And a more fluent object based API.

I am not going to bother documenting every single last function here but please
see below for some general usage examples. The rest you can work out for
yourself by reading the source, it’s fairly straight forward and well commented.

How to Install

Installation via composer is easy:

composer require gears/arrays:*

How to Use

Here are a few procedural examples:

$data = ;

$data = GearsArraysadd($data, 'a.b.c', 'd');

// $data now looks like: ['a' => ['b' => ['c' => 'd']]];

GearsArraysset($data, 'a.b.c', 'foo');

// $data now looks like: ['a' => ['b' => ['c' => 'foo']]];

GearsArraysforget($data, 'a.b.c');

// $data now looks like: ['a' => ['b' => ]];

In PHP 5.6 you can import functions so you could change the above to:

// Import the functions
use function GearsArraysadd;
use function GearsArraysset;
use function GearsArraysforget;

// This results in the same array
$data = ;
$data = add($data, 'a.b.c', 'd');
set($data, 'a.b.c', 'foo');
forget($data, 'a.b.c');

NOTE: All function names are camelCased.

Prior to PHP 5.6 this is not possible. So you can do this instead:

// Import the Array class
use GearsArrays as Arr;

// This results in the same array
$data = ;
$data = Arr::add($data, 'a.b.c', 'd');
Arr::set($data, 'a.b.c', 'foo');
Arr::forget($data, 'a.b.c');

NOTE: Just like the standard array_ functions included in PHP.
Some functions act on a refrence of an array while others will take a copy
and return the modifications or other values.

The Fluent Array Object:

Okay so this is such a massive part of the package it requires it’s own HOW-TO
section. To get started you can create a new object like so:

$data = new GearsArraysFluent();
$data = 'foo';
$data = 'bar';

foreach ($data as $item)
{
	echo $item.',';
}

// you would see: foo,bar

As you can see the data variable is now an Array-Like object. This is key
because some times certian functions will expect real arrays.
To get a real array back out of the fluent object you can do this:

$real_array = $data->toArray();

You may wish to use a factory method to initiate a new Fluent object.

// Import the Array class
use GearsArrays as Arr;

// Use the factory method
$data = Arr::a();

When you are using the Fluent API, please note how the subsequent method
call signature changes vs that of the procedural api. You no longer need
to provide the array to be performed on as the first argument. This is
automatically done for you.

Here is the same example from the procedural api:

$data = Arr::a();
$data->add('a.b.c', 'd');
$data->set('a.b.c', 'foo');
$data->forget('a.b.c');

Now a keen eye might have thought that on line 2 there is an error.
You might be thinking that the second line should look like this:

$data = $data->add('a.b.c', 'd');

But you would be wrong. Unlike the GearsString package. The Fluent API
and the Procedural API of GearsArrays, while similar, they are not
identical. In part this is due to the more complex nature of arrays. Please
beware that there are methods in both APIs that have the same name yet do
slightly different things.

For example I can also use the add method like so:

Arr::a([1,2,3])->add(4)->each(function($v){ echo $v.','; });

// would output: 1,2,3,4,

Recursive Nature: Unlike a standard IlluminateSupportCollection
object a GearsArraysFluent object is recursive. Each new fluent
object is only loaded when it is accessed, thus minimizing any performance
losses.

Lets show with an example:

$data = Arr::a(['a' => ['b' => ['c' => 'd']]]);

print_r($data);

// you would see something like:
GearsArraysFluent Object
(
	[items:protected] => Array
	(
		[a] => Array
		(
			[b] => Array
			(
				[c] => 'd'
			)
		)
	)
)

// now lets access something
$data['a']['b']['c'];

print_r($data);

// you would now see something like:
GearsArraysFluent Object
(
	[items:protected] => Array
	(
		[a] => GearsArraysFluent Object
		(
			[items:protected] => Array
			(
				[b] => GearsArraysFluent Object
				(
					[items:protected] => Array
					(
						[c] => d
					)
				)
			)
		)
	)
)

Object Access: The last thing I would like to show off is the way you can
now use your array is if it were an object. Again I like my examples:

$data1 = Arr::a();
$data1['a'] = ;
$data1['a']['b'] = ;
$data1['a']['b']['c'] = 'd';

$data2 = Arr::a();
$data2->a = ;
$data2->a->b = ;
$data2->a->b->c = 'd';

// $data1 == $data2

This Readme only skims the surface of what is possible with the Fluent API.
I promise a full set of documentation is coming… but I do have a life as well.

Laravel Integration

GearsArrays has been designed as functionally compatible to the Laravel Arr
class, in fact it extends the class. Thus everything you could do before you can
still do and then some.

By default Laravel does not alias the Arr class. So feel free to add the
following to your alias list in the file /app/config/app.php:

'Arr' => 'GearsArrays',

Also note that GearsArraysFluent is again compaitible
with the standard IlluminateSupportCollection class.

Credits

Thanks to axelarge for the inspiration, I have taken his methods re-factored
them slightly and added a few of my own methods, into the mix.
https://github.com/axelarge/php-array-tools

Additionally all methods in the class IlluminateSupportArr
provided by Laravel. Have been integrated into GearsArray.
https://github.com/laravel/framework/blob/4.2/src/Illuminate/Support/Arr.php

Also from Laravel IlluminateSupportCollection, our fluent interface
extends this class. Some have refered to the Laravel Collection class as
Arrays on steriods. So I am not sure what you would call our fluent class.
Arrays on INSERT HARD CORE DRUG HERE

Developed by Brad Jones – [email protected]

Source

Add a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *