PHP code example of adhocore / underscore
1. Go to this page and download the library: Download adhocore/underscore library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
adhocore / underscore example snippets
$fn = underscore()->constant([1, 2]);
$fn(); // [1, 2]
underscore()->noop(); // void/null
$rand = underscore()->random(1, 10);
$fn = function ($i) { return $i * 2; };
underscore()->times(5, $fn)->get();
// [0, 2, 4, 6, 8]
$u = underscore()->uniqueId(); // '1'
$u1 = underscore()->uniqueId(); // '2'
$u3 = underscore()->uniqueId('id:'); // 'id:3'
$c = underscore()->compose('strlen', 'strtolower', 'strtoupper');
$c('aBc.xYz'); // ABC.XYZ => abc.xyz => 7
$cb = underscore()->delay(function () { echo 'OK'; }, 100);
// waits 100ms
$cb(); // 'OK'
$sum = underscore()->memoize(function ($a, $b) { return $a + $b; });
$sum(4, 5); // 9
// Uses memo:
$sum(4, 5); // 9
$fn = underscore()->throttle($callback, 100);
while (...) {
$fn(); // it will be constantly called but not executed more than one in 100ms
if (...) break;
}
underscore($array)->compact()->get();
// [1 => 'a', 4 => 2, 5 => [1]
underscore([1, 2, 1, 'a' => 3, 'b' => [4]])->difference([1, [4]])->get();
// [1 => 2, 'a' => 3]
$u = underscore([[1, 2], 'a' => 3, 'x' => 4, 'y' => 2, 'b' => 'B']);
$isEven = function ($i) { return is_numeric($i) && $i % 2 === 0; };
$u->findIndex(); // 0
$u->findIndex($isEven); // 'x'
$u = underscore([[1, 2], 'a' => 3, 'x' => 4, 'y' => 2, 'b' => 'B']);
$isEven = function ($i) { return is_numeric($i) && $i % 2 === 0; };
$u->findLastIndex(); // 'b'
$u->findLastIndex($isEven); // 'y'
underscore([1, 2, 3])->first(); // 1
underscore([1, 2, 3])->first(2); // [1, 2]
$u = underscore([0, 'a', '', [[1, [2]]], 'b', [[[3]], 4, 'c', underscore([5, 'd'])]]);
$u->flatten()->get(); // [0, 'a', '', 1, 2, 'b', 3, 4, 'c', 5, 'd']
$u = underscore([[1, 2], 'a' => 2, 'x' => 4]);
$array->indexOf(2); // 'a'
$u = underscore([1, 2, 'a' => 3]);
$u->intersection([2, 'a' => 3, 3])->get(); // [1 => 2, 'a' => 3]
underscore([1, 2, 3])->last(); // 3
underscore([1, 2, 3])->last(2); // [2, 3]
$u = underscore([[1, 2], 'a' => 2, 'x' => 4, 'y' => 2]);
$array->lastIndexOf(2); // 'y'
underscore(['a', 'b' => 2])->object(); // stdClass(0: 'a', 'b': 2)
underscore()->range(4, 9)->get(); // [4, 5, 6, 7, 8, 9]
underscore([1, 3, 5, 8, 11])->sortedIndex(9, null); // 4
$u = underscore([1, 2, 'a' => 3]);
$u->union([3, 'a' => 4, 'b' => [5]])->get(); // [1, 2, 'a' => 4, 3, 'b' => [5]]
$u = underscore([1, 2, 'a' => 3]);
$u->union([3, 'a' => 4, 'b' => [5]])->get();
// [1, 2, 'a' => 4, 3, 'b' => [5]]
$u = underscore([1, 2, 'a' => 3, 'b' => 'B']);
$u->zip([2, 4, 'a' => 5])->get();
// [[1, 2], [2, 4], 'a' => [3, 5], 'b' => ['B', null]]
$u = underscore(['a' => 1, 'b' => 2, 'c' => 3, 5]);
$u->contains(1); // true
$u->contains('x'); // false
$u = underscore([
['a' => 0, 'b' => 1, 'c' => 1],
['a' => true, 'b' => false, 'c' => 'c'],
['a' => 2, 'b' => 1, 'c' => 2],
['a' => 1, 'b' => null, 'c' => 0],
]);
// by key 'a'
$u->countBy('a')->get();
// [0 => 1, 1 => 2, 2 => 1]
$answers = [];
underscore([1, 2, 3])->each(function ($num) use (&$answers) {
$answers[] = $num * 5;
});
$answers; // [5, 10, 15]
$gt0 = underscore([1, 2, 3, 4])->every(function ($num) { return $num > 0; });
$gt0; // true
$gt2 = underscore([1, 2, 4, 0, 3])->filter(function ($num) { return $num > 2; });
$gt2->values(); // [4, 3]
$num = underscore([1, 2, 4, 3])->find(function ($num) { return $num > 2; });
$num; // 4
$idx = underscore([1, 2, 4, 3])->find(function ($num) { return $num > 2; }, false);
$idx; // 2
$u = underscore([['a' => 1, 'b' => 2], ['a' => 2, 'b' => 2], ['a' => 1, 'b' => 3]]);
$u->findWhere(['b' => 3]); // ['a' => 1, 'b' => 3]
$u = underscore([
['a' => 0, 'b' => 1, 'c' => 1],
['a' => true, 'b' => false, 'c' => 'c'],
['a' => 2, 'b' => 1, 'c' => 2],
['a' => 1, 'b' => null, 'c' => 0],
]);
// by key 'a'
$u->groupBy('a')->get();
// [
// 0 => [0 => ['a' => 0, 'b' => 1, 'c' => 1]],
// 1 => [1 => ['a' => true, 'b' => false, 'c' => 'c'], 3 => ['a' => 1, 'b' => null, 'c' => 0]],
// 2 => [2 => ['a' => 2, 'b' => 1, 'c' => 2]],
// ]
$u = underscore([
['a' => 0, 'b' => 1, 'c' => 1],
['a' => true, 'b' => false, 'c' => 'c'],
['a' => 2, 'b' => 1, 'c' => 2],
['a' => 1, 'b' => null, 'c' => 0],
]);
// by key 'a'
$u->indexBy('a')->get();
// [
// 0 => ['a' => 0, 'b' => 1, 'c' => 1],
// 1 => ['a' => 1, 'b' => null, 'c' => 0],
// 2 => ['a' => 2, 'b' => 1, 'c' => 2],
// ]
$sum = underscore([1, 2, 4])->invoke(function () { return array_sum(func_get_args()); });
$sum; // 7
$map = underscore([1, 2, 3])->map(function ($num) { return $num * 2; });
$map->get(); // [2, 4, 6]
underscore([1, 5, 4])->max(); // 5
$u = underscore([['a' => 1, 'b' => 2], ['a' => 2, 'b' => 3], ['a' => 0, 'b' => 1]]);
$u->max(function ($i) { return $i['a'] + $i['b']; }); // 5
underscore([1, 5, 4])->min(); // 1
$u = underscore([['a' => 1, 'b' => 2], ['a' => 2, 'b' => 3], ['a' => 0, 'b' => 1]]);
$u->min(function ($i) { return $i['a'] + $i['b']; }); // 1
$u = underscore(range(1, 10));
$oddEvn = $u->partition(function ($i) { return $i % 2; });
$oddEvn->get(0); // [1, 3, 5, 7, 9]
$oddEvn->get(1); // [2, 4, 6, 8, 10]
$u = underscore([['name' => 'moe', 'age' => 30], ['name' => 'curly']]);
$u->pluck('name')->get(); // ['moe', 'curly']
$sum = underscore([1, 2, 3])->reduce(function ($sum, $num) {
return $num + $sum;
}, 0);
$sum; // 6
$concat = underscore([1, 2, 3, 4])->reduceRight(function ($concat, $num) {
return $concat . $num;
}, '');
echo $concat; // '4321'
$evens = underscore([1, 2, 3, 4, 5, 7, 6])->reject(function ($num) {
return $num % 2 !== 0;
});
$evens->values(); // [2, 4, 6]
$u = underscore([1, 2, 3, 4]);
$u->sample(1)->count(); // 1
$u->sample(2)->count(); // 2
underscore([1, 2, 3, 4])->shuffle()->get();
$some = underscore([1, 2, 0, 4, -1])->some(function ($num) {
return $num > 0;
});
$some; // true
$u = underscore(range(1, 15))->shuffle(); // randomize
$u->sortBy(null)->get(); // [1, 2, ... 15]
$u = underscore([['a' => 1, 'b' => 2], ['a' => 2, 'b' => 3], ['a' => 0, 'b' => 1]]);
$u->sortBy('a')->get();
// [2 => ['a' => 0, 'b' => 1], 0 => ['a' => 1, 'b' => 2], 1 => ['a' => 2, 'b' => 3]]
$u->sortBy(function ($i) { return $i['a'] + $i['b']; })->get();
// [2 => ['a' => 0, 'b' => 1], 0 => ['a' => 1, 'b' => 2], 1 => ['a' => 2, 'b' => 3]],
$u = underscore([['a' => 1, 'b' => 2], ['a' => 2, 'b' => 2], ['a' => 1, 'b' => 3, 'c']]);
$u->where(['a' => 1, 'b' => 2])->get(); // [['a' => 1, 'b' => 2, 'c']]
$u = Ahc\Underscore\Underscore::_([1, 3, 7]);
echo (string) underscore([1, 2, 3]); // [1, 2, 3]
echo (string) underscore(['a', 2, 'c' => 3]); // {0: "a", 1: 2, "c":3}
underscore()->asArray('one'); // ['one']
underscore()->asArray([1, 2]); // [1, 2]
underscore()->asArray(underscore(['a', 1, 'c', 3])); // ['a', 1, 'c', 3]
underscore()->asArray(new class {
public function toArray()
{
return ['a', 'b', 'c'];
}
}); // ['a', 'b', 'c']
underscore()->asArray(new class implements \JsonSerializable {
public function jsonSerialize()
{
return ['a' => 1, 'b' => 2, 'c' => 3];
}
}); // ['a' => 1, 'b' => 2, 'c' => 3]
$u = underscore(['will', 'be', 'cloned']);
$u->clon() == $u; // true
$u->clon() === $u; // false
underscore([1, 2, [3, 4]])->count(); // 3
underscore()->count(); // 0
underscore()->flat([1, 2, [3, 4, [5, 6]]]); // [1, 2, 3, 4, 5, 6]
$u = underscore([1, 2, 3]);
$u->get(); // [1, 2, 3]
$u->get(1); // 2
$u->get(3); // 3
// same as `get()` without args:
underscore([1, 2, 3])->getData(); // [1, 2, 3]
$it = underscore([1, 2, 3])->getIterator();
while ($it->valid()) {
echo $it->current();
}
$u = underscore(['a' => 1, 'b' => 2, 'c' => 3]);
$u->invert()->get(); // [1 => 'a', 2 => 'b', 3 => 'c']
$u = underscore(['a' => 1, 'b' => 2, 'c' => 3]);
json_encode($u); // {"a":1,"b":2,"c":3}
$u = underscore(['a' => 1, 'b' => 2, 'c' => 3, 5]);
$u->keys()->get(); // ['a', 'b', 'c', 0]
Ahc\Underscore\Underscore::mixin('square', function () {
return $this->map(function ($v) { return $v * $v; });
});
underscore([1, 2, 3])->square()->get(); // [1, 4, 9]
underscore()->now(); // 1529996371081
$u = underscore(['a' => 3, 7, 'b' => 'B', 1 => ['c', 5]]);
$u->omit('a', 0)->get(); // ['b' => 'B', 1 => ['c', 5]]
$u = ['a' => 3, 7, 'b' => 'B'];
$u->pair(); // ['a' => ['a', 3], 0 => [0, 7], 'b' => ['b', 'B']
$u = underscore(['a' => 3, 7, 'b' => 'B', 1 => ['c', 5]]);
$u->pick(0, 1)->get(); // [7, 1 => ['c', 5]]
$u = underscore([1, 2]);
$tap = $u->tap(function ($_) { return $_->values(); });
$tap === $u; // true
$u = underscore([1, 3, 5, 7]);
$u->toArray(); // [1, 3, 5, 7]
underscore(['a', 2, 'c' => 3])->valueOf(); // {0: "a", 1: 2, "c":3}
$u = underscore(['a' => 1, 'b' => 2, 'c' => 3, 5]);
$u->values()->get(); // [1, 2, 3, 5]
// Higher Order Messaging
class HOM
{
protected $n;
public $square;
public function __construct($n)
{
$this->n = $n;
$this->square = $n * $n;
}
public function even()
{
return $this->n % 2 === 0;
}
}
$u = [new HOM(1), new HOM(2), new HOM(3), new HOM(4)];
// Filter `even()` items
$evens = $u->filter->even(); // 'even()' method of each items!
// Map each evens to their squares
$squares = $evens->map->square; // 'square' prop of each items!
// Gives an Underscore instance
// Get the data
$squares->get();
// [1 => 4, 3 => 16]
$evens = $u->filter(function ($it) {
return $it->even();
});
$squares = $evens->map(function ($it) {
return $it->square;
});
$u = underscore([1, 2, 'a' => 3]);
isset($u['a']); // true
isset($u['b']); // false
echo $u[1]; // 2
$u['b'] = 'B';
isset($u['b']); // true
unset($u[1]);
use Ahc\Underscore\Arrayizes;
class Any
{
use Arrayizes;
public function name()
{
$this->asArray($data);
}
}