Search code examples
phpstdclassarray-push

array_push for stdClass with numeric keys


I'm trying to use a function similar to array_push but for objects (stdClass) in PHP. See what I expect:

<?php
$obj = new stdClass();
$obj->a = 'foo';
$obj->{'0'} = 'far';

var_dump($obj);
// > object(stdClass)#1 (2) { ["a"]=> string(3) "foo" ["0"]=> string(3) "far" }

var_dump(object_push($obj, 'coin'));
// > object(stdClass)#1 (3) { ["a"]=> string(3) "foo" ["0"]=> string(3) "far" ["1"]=> string(4) "coin" }

Solution

  • You can use this function object_push:

    function object_push($object, $value) {
        $object->{max(array_filter(array_keys((array) $object), 'is_numeric') + [-1]) + 1} = $value;
        return $object;
    }
    

    Use it then as you would use array_push:

    $obj = new stdClass();
    $obj->a = 'foo';
    $obj->{'0'} = 'far';
    
    var_dump($obj);
    // > object(stdClass)#1 (2) { ["a"]=> string(3) "foo" ["0"]=> string(3) "far" }
    
    var_dump(object_push($obj, 'coin'));
    // > object(stdClass)#1 (3) { ["a"]=> string(3) "foo" ["0"]=> string(3) "far" ["1"]=> string(4) "coin" }
    

    Peace