Search code examples
phparraysobjectarray-push

Array Push to Array of Objects


I have an array in this format;

// echo '<pre>' . var_export($this->viewableFields, true) . '</pre>';

array (
  0 => 
  (object) array(
     'formId' => '4',
     'componentId' => '-7',
     'viewable' => '1',
     'searchable' => '0',
     'editable' => '0'
  ),
  1 => 
  (object) array(
     'formId' => '4',
     'componentId' => '-4',
     'viewable' => '1',
     'searchable' => '1',
     'editable' => '0'
  )
)

I am selecting some data from a mysql database and I need to add this to the array. I want to add group = Registered, so the output will look like this;

// echo '<pre>' . var_export($this->viewableFields, true) . '</pre>';

array (
  0 => 
  (object) array(
     'formId' => '4',
     'componentId' => '-7',
     'viewable' => '1',
     'searchable' => '0',
     'editable' => '0',
     'group' => 'Registered'
  ),
  1 => 
  (object) array(
     'formId' => '4',
     'componentId' => '-4',
     'viewable' => '1',
     'searchable' => '1',
     'editable' => '0',
     'group' => 'Registered'
  )
)

I have tried the following but it simply creates another item at the end of the array (number [2]).

$group = (object) array(
    'group' => 'Registered'
);

array_push($this->viewableFields, $group);

Note, I can't modify the SQL.


Solution

  • Assuming $this->viewableFields is your wider array, you can use array_walk() to modify the array in-situ.

    array_walk($this->viewableFields, function(&$arr) {
        $arr->group = 'Registered';
    });