A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/setnemo/asterisk-notation below:

setnemo/asterisk-notation: Asterisk notation for array access in PHP

Asterisk notation for array access in PHP. Update array access to the next level of usability.

use Setnemo\Asterisk;

$items = new Asterisk([
    'Europe' => [
        'Ukraine' => [
            'capital' => 'Kyiv',
            'currency' => 'UAH'
        ],
        'Poland' => [
            'capital' => 'Warsaw',
            'currency' => 'PLN'
        ],

    ],
    'Africa' => [
        'South Africa' => [
            'capital' => 'Capetown',
            'currency' => 'ZAR'
        ],
        'Nigeria' => [
            'capital' => 'Abuja',
            'currency' => 'NGN'
        ],
    ],
]);
$city = 'Kyiv';
$resultTrue = $items->has('*.*.capital', $city);
$resultFalse = $items->has('Africa.*.capital', $city);
if ($resultTrue === true && $resultFalse === false) {
    echo "Wow! It works correctly!";
}

Install the latest version using Composer:

composer require setnemo/asterisk-notation

Create a new \Setnemo\Asterisk object:

use Adbar\Dot;
use Setnemo\Asterisk;
$asterisk = new Asterisk;
$array = ['first_one' => ['second' => 'value'], 'first_two' => ['second' => 'value'],];
// With existing array
$asterisk = new Asterisk($array);
// With existing \Adbar\Dot
$dot = new Dot($array);
$asterisk = new Asterisk($dot);
// or existing Asterisk
$newAsterisk = new Asterisk($asterisk);

Asterisk has the following methods:

Using for adding element with asterisk in key

Work like Adbar\Dot::add()

Work like Adbar\Dot::all()

Deletes the contents of a given key (sets an empty array):

$asterisk->clear('department.*.write_rules');

// Equivalent vanilla PHP
$array['department']['project1']['write_rules'] = [];
$array['department']['project2']['write_rules'] = [];
$array['department']['projectN']['write_rules'] = [];

Multiple keys:

$asterisk->clear(['department.*.write_rules', 'department.*.read_rules']);

All the stored items:

$asterisk->clear();

// Equivalent vanilla PHP
$array = [];

If key not contains * (asterisk) - it works like Adbar\Dot::clear()

Returns the number of items in a given key:

$asterisk->count('user.siblings');

Items in the root of Dot object:

$asterisk->count();

// Or use count() function as Dot implements Countable
count($asterisk);

If key not contains * (asterisk) - it works like Adbar\Dot::count()

Deletes the given key:

$asterisk->delete('*.name');

// ArrayAccess
unset($asterisk['user1.name']);
unset($asterisk['user2.name']);

// Equivalent vanilla PHP
unset($array['user1']['name']);
unset($array['user2']['name']);

Multiple keys:

$asterisk->delete([
    '*.name',
    '*.title'
]);

It works like Adbar\Dot::flatten()

Returns the value of a given key:

$result = $asterisk->get('*.name'));

// ArrayAccess
$result['user1.name'] = $asterisk['user1.name'];
$result['user2.name'] = $asterisk['user2.name'];

// Equivalent vanilla PHP 
if (isset($array['user1']['name']) {
    $result['user1.name'] = $array['user1']['name'];
}
if (isset($array['user1']['name']) {
    $result['user2.name'] = $array['user2']['name'];
}

Returns a given default value, if the given key doesn't exist:

echo $asterisk->get('user.name', 'some default value');

Default value not work with asterisk

Checks if a given key exists (returns boolean true or false):

$asterisk->has('user.name');

// ArrayAccess
isset($asterisk['user.name']);

Multiple keys:

$asterisk->has([
    'user.name',
    'page.title'
]);

With asterisk:

$asterisk = new \Setnemo\Asterisk(['1' => ['second' => 'value'],'2' => ['second' => 'value']]);
$asterisk->has('*.second'); // true
$asterisk = new \Setnemo\Asterisk(['1' => ['first' => ['test' => 42]],'2' => ['second' => 'value'],'3' => ['third' => ['value' => 42]]]);
$asterisk->has('*.*.value'); // true
$asterisk = new \Setnemo\Asterisk(['user1' => ['name' => 'John', 'job' => 'warrior'], 'user2' => ['name' => 'Robin', 'job' => 'archer']);
$asterisk->has('*.spouse'); // false

With asterisk and value:

$asterisk = new \Setnemo\Asterisk([]);
$asterisk->has('*', false); // false
$asterisk = new \Setnemo\Asterisk(['*' => ['second' => 'VALUE']]);
$asterisk->has('*.second', 'VALUE'); // true
$asterisk->has('*.second', 'value'); // false because lowercase
$asterisk = new \Setnemo\Asterisk(['*' => ['second' => 'value'], 0 => [0 => 0], 11 => 11]);
$asterisk->has('*.11', 11); // true
$asterisk = new \Setnemo\Asterisk(['1' => ['second' => 'value'],'2' => ['second' => '-']]);
$asterisk->has('*.second', 'value'); // false because 'second' => '-'
$asterisk = new \Setnemo\Asterisk(['1' => ['second' => 'value'],'2' => ['second' => 'value']]);
$asterisk->has('*.second', 'value'); // true

With asterisk and value (non-strict mode):

$asterisk = new \Setnemo\Asterisk([
'locations' => [
    'Europe' => [
        'Ukraine' => [
            'capital' => 'Kyiv',
            'currency' => 'UAH'
        ],
        'Poland' => [
            'capital' => 'Warsaw',
            'currency' => 'PLN'
        ],

    ],
    'Africa' => [
        'South Africa' => [
            'capital' => 'Capetown',
            'currency' => 'ZAR'
        ],
        'Nigeria' => [
            'capital' => 'Abuja',
            'currency' => 'NGN'
        ],
    ],
]]);
// third parameter is false for non-strict mode
$asterisk->has('locations.*.*.capital', 'Kyiv', false); // true
$asterisk->has('locations.*.*.currency', 'ZAR', false); // true
$asterisk->has('locations.Europe.*.currency', 'ZAR', false); // false

Checks if a given key is empty (returns boolean true or false):

$asterisk->isEmpty('user.name');

// ArrayAccess
empty($asterisk['user.name']);

// Equivalent vanilla PHP
empty($array['user']['name']);

Multiple keys:

$asterisk->isEmpty([
    'user.name',
    'page.title'
]);

Checks the whole Asterisk object:

Also works with asterisk in key:

$asterisk = new \Setnemo\Asterisk(['user1' => ['name' => 'John'], 'user2' => ['name' => 'Robin']);
$asterisk->isEmpty('*.name'); // false
$asterisk->isEmpty('*.spouse'); // true

It works like Adbar\Dot::merge() Asterisk in path Asterisk::merge('key', 'value') work like Asterisk::set('key', 'value', false)

It works like Adbar\Dot::mergeRecursive() Asterisk in path Asterisk::mergeRecursive('key', 'value') work like Asterisk::set('key', 'value', false)

It works like Adbar\Dot::mergeRecursiveDistinct()

Returns the value of a given key and deletes the key:

echo $asterisk->pull('user.name');

// Equivalent vanilla PHP < 7.0
echo isset($array['user']['name']) ? $array['user']['name'] : null;
unset($array['user']['name']);

// Equivalent vanilla PHP >= 7.0
echo $array['user']['name'] ?? null;
unset($array['user']['name']);

Returns a given default value, if the given key doesn't exist:

echo $asterisk->pull('user.name', 'some default value');

Default value not work with asterisk in query!

Returns all the stored items as an array and clears the Dot object:

$items = $asterisk->pull();

Key with asterisk:

$asterisk = new \Setnemo\Asterisk([['user1' => ['name' => 'John', 'job' => 'warrior'], 'user2' => ['name' => 'Robin', 'job' => 'archer'],]]);
$result = $asterisk->pull('*.name'); // ['user1.name' => 'John', 'user2.name' => 'Robin']
$all = $asterisk->all(); // ['user1' => ['job' => 'warrior'], 'user2' => ['job' => 'archer'],]
 

Pushes a given value to the end of the array in a given key:

$asterisk->push('users', 'John');

// Equivalent vanilla PHP
$array['users'][] = 'John';

Pushes a given value to the end of the array:

$asterisk->push('John');

// Equivalent vanilla PHP
$array[] = 'John';

With asterisk:

$asterisk = new \Setnemo\Asterisk([
    'first_one' => ['second' => 'value'],
    'first_two' => ['second' => 'value']
]);
$asterisk->push('*.second', 'John');

$asterisk->all();
/*
[
    'first_one' => ['second' => ['value','VALUE']],
    'first_two' => ['second' => ['value','VALUE']]
]
 */

Also work as Asterisk::set('key', 'value', true), where true is asterisk boolean. See Asterisk::set()

It works like Adbar\Dot::replace()

Sets a given key / value pair:

$asterisk->set('user.name', 'John');

// ArrayAccess
$asterisk['user.name'] = 'John';

// Equivalent vanilla PHP
$array['user']['name'] = 'John';

Multiple key / value pairs:

$asterisk->set([
    'user.name' => 'John',
    'page.title'     => 'Home'
]);

It works like Adbar\Dot::setarray()

It works like Adbar\Dot::setreference()

It works like Adbar\Dot::toJson()

MIT license


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4