Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PHP Map

Aimeos
September 04, 2020

PHP Map

Easy to use and elegant handling for PHP arrays using Map objects

Aimeos

September 04, 2020
Tweet

More Decks by Aimeos

Other Decks in Programming

Transcript

  1. PHP Array > Map

    View Slide

  2. Aimeos
    E-Commerce framework

    View Slide

  3. Why?

    View Slide

  4. $list = [
    ['id' => '1', 'value' => 'value1'],
    ['id' => '2', 'value' => 'value2'],
    null
    ];
    Starting point

    View Slide

  5. $list[] = ['id' => '3', 'value' => 'value3'];
    unset($list[0]);
    $list = array_filter($list);
    sort($list);
    $pairs = array_column($list, 'value', 'id');
    $value = reset($pairs) ?: null;
    Current way

    View Slide

  6. Solutions

    View Slide


  7. Laravel collections

    CakePHP collections

    Arrayy

    Underscore.php (ceased)
    Others

    View Slide

  8. php-map.org

    View Slide

  9. $value = map( $list )
    ->push(['id' => '3', 'value' => 'value3'])
    ->remove(0)
    ->filter()
    ->sort()
    ->col('value', 'id')
    ->first();
    Using Map

    View Slide

  10. $map[] = ['id' => '3', 'value' => 'value3'];
    $value = $map[0];
    count($map);
    foreach($map as $key => value) {}
    Still possible

    View Slide

  11. More than
    array

    View Slide


  12. map()

    new Map()

    Map::from()
    Creating maps

    map([1, 2, 3])

    map(new Map())

    map($iterator)

    map('abc')

    View Slide

  13. Almost all array
    methods supported
    Array methods

    View Slide


  14. concat()

    collapse()

    duplicates()

    flat()

    countBy()

    groupBy()
    Additional methods

    except()

    only()

    pull()

    take()

    skip()

    ...

    View Slide


  15. each()

    every()

    nth()

    pipe()

    some()

    ...
    Accepting closures

    View Slide

  16. $map->each( function( $val, $key ) {
    echo $key . ': ' . $val;
    } );
    Closure example

    View Slide


  17. concat()

    every()

    find()

    flat()

    includes()

    join()

    keys()
    Like Javascript

    map()

    pop()

    push()

    reduce()

    reverse()

    some()

    ...

    View Slide

  18. Useful methods
    map([1,2,3])->join(','); // '1,2,3'
    Map::split('1,2,3'); // map([1,2,3])
    map(['a'=>1,'b'=>2])->toUrl(); // 'a=1&b=2'
    map(['a'=>1,'b'=>2])->toJson();
    // '{"a":1,"b":2}'

    View Slide

  19. Fluent interface
    $map->push( 'value' )
    ->remove( 0 )
    ->filter()
    ->sort();

    View Slide

  20. $e = new \RuntimeException('not found');
    map([])->first($e);
    Find or fail

    View Slide

  21. Map::method( 'strrev', function($sep) {
    return strrev(join($sep, $this->list));
    } );
    Map::from(['c', 'b', 'a'])->strrev(' > ');
    // returns 'a > b > c'
    Custom methods

    View Slide

  22. jQuery style

    View Slide

  23. class MyClass {
    private $code;
    private $status = 0;
    public function __construct( $code ) { $this->code = $code; }
    public function setStatus( int $s ) { $this->stat = $s; return $this; }
    public function getCode() { return $this->code; }
    }
    Example class

    View Slide

  24. $objects = Map::from( [
    'a' => new MyClass( 'x' ),
    'b' => new MyClass( 'y' )
    ] );
    Example Map

    View Slide

  25. $result = $objects
    ->setStatus(1)
    ->getCode()
    ->toArray();
    Operations on objects

    View Slide

  26. // status of all object is 1
    // $result contains:
    ['a' => 'x', 'b' => 'y']
    Result

    View Slide

  27. ?

    View Slide

  28. Aimeos
    php-map.org
    Twitter: @aimeos
    facebook.com/Aimeos

    View Slide