pisca/rarr

PHP 的数组类

0.0.13 2016-11-14 14:39 UTC

This package is not auto-updated.

Last update: 2024-09-14 19:42:06 UTC


README

Latest Stable Version Build Status

rarr ✅

PHP 的数组类

安装

$ composer require pisc/arrr

实例化

// shorthand function (global function)
$array = ar([ 'someKey' => 'someValue' ]);

// constructor
$array = new Arrr([ 'someKey' => 'someValue' ]);

$array = new Ar([ 'someKey' => 'someValue' ]); // returns Ar instance
$array->mapIt(function($item) {
	return $item . "_suffix";
}); // returns Arrr instance

// factory
$array = Arrr::ar([ 'someKey' => 'someValue' ]);
$array = Arrr::instance([ 'someKey' => 'someValue' ]);
$array = Ar::ar([ 'someKey' => 'someValue' ]);
$array = Ar::instance([ 'someKey' => 'someValue' ]);

如何使用

use pisc\arrr\arrr;

$array = ar([ 'someKey' => 'someValue' ]);
$flat = Ar::flatten([ 'cow', [ 'bear', ['bunny', 'santa' ], 'rabbit' ]]);

大多数方法可以这样调用

  • 静态方法,第一个参数为数组 - Ar::map($array, function($item) { return $item; })
  • 实例方法,返回 Arrr 的新实例 - $Arrr->map(function($item) { return $item; })
  • 实例方法,在当前实例上工作 - $Arrr->mapIt(function($item) { return $item; })

约定

所有以 'It' 结尾的方法都会修改数组本身并返回本身,所以你可以这样做

$places = ar([
	'Amsterdam',
	'Berlin',
	'Paris',
	'Vienna',
	'Rome',
	'Madrid'
]);

$places->filterIt(function($place) {
	return in_array($place[0], [ 'A', 'V', 'R' ]);
});

$places->mapIt(function($place) {
	return "To destination {$place}";
})

echo $places->toJson(); 

// returns
'[ "To destination Amsterdam", "To destination Vienna", "To destination Rome" ]'

运行测试

# When installed globally
$ phpunit 

# When installed locally
$ ./vendor/bin/phpunit

方法

sortBy (sortByIt)

按多个键或闭包的结果对数组进行排序。当比较函数的结果为 0 时,将测试下一个键或闭包

接受

  • $sortByKeys ((array) string / closure )
  • $methods ((array) string / callable )
$array = ar([
	(object)[ 'id' => 1, 'name' => 'Jack', 'length' => 180 ],
	(object)[ 'id' => 2, 'name' => 'Jack', 'length' => 150 ],
	(object)[ 'id' => 3, 'name' => 'Ben', 'length' => 180 ],
	(object)[ 'id' => 4, 'name' => 'Ben', 'length' => 150 ],
	(object)[ 'id' => 5, 'name' => 'Vince', 'length' => 180 ],
	(object)[ 'id' => 6, 'name' => 'Vince', 'length' => 150 ],
]);

$sortedArray = $array->sortBy([ 'length', 'name' ], [ 'Sort::byDefault', 'strcmp' ]);

// result
[
	(object)[ 'id' => 4, 'name' => 'Ben', 'length' => 150 ],
	(object)[ 'id' => 2, 'name' => 'Jack', 'length' => 150 ],
	(object)[ 'id' => 6, 'name' => 'Vince', 'length' => 150 ],
	(object)[ 'id' => 3, 'name' => 'Ben', 'length' => 180 ],
	(object)[ 'id' => 1, 'name' => 'Jack', 'length' => 180 ],
	(object)[ 'id' => 5, 'name' => 'Vince', 'length' => 180 ],
	
]