Code Lover
Code Lover

Reputation: 8348

Convert stdClass Object in to multidimentional array

I have $positions stdClass Object as below

Array
(
    [0] => stdClass Object
        (
            [id] => 2
            [position] => am
            [label] => Account Manager
        )

    [1] => stdClass Object
        (
            [id] => 6
            [position] => agn
            [label] => Agent
        )

    [2] => stdClass Object
        (
            [id] => 5
            [position] => bdev
            [label] => Business Development
        )

    [3] => stdClass Object
        (
            [id] => 4
            [position] => fin
            [label] => Finance
        )

    [4] => stdClass Object
        (
            [id] => 1
            [position] => hr
            [label] => Human Resource
        )

    [5] => stdClass Object
        (
            [id] => 3
            [position] => it
            [label] => Information Technology
        )

)

I want to convert it as an multidimensional array so I beed ut to return it into a function and reuse it as per need.. something like below

array(

    array (
        'id' => 1,
        'position' => 'admin',
        'label' => 'Administrator'
    ),

    array (
        'id' => 2,
        'position' => 'am',
        'label' => 'Account Manager'
    ),

    array (
        'id' => 3,
        'position' => 'hr',
        'label' => 'Human Resource'
    ),
);

I am not sure what exactly array form would be but I want to return array so I can get entire table and than can use it into the system.

I have tried below but it is not giving output as I want

foreach($positions as $position){
    $array[] = $position->id;
    $array[] = $position->label;
    $array[] = $position->position;
}

echo '<pre>',print_r($array),'</pre>';

Output

Array
(
    [0] => 2
    [1] => Account Manager
    [2] => am
    [3] => 6
    [4] => Agent
    [5] => agn
    [6] => 5
    [7] => Business Development
    [8] => bdev
    [9] => 4
    [10] => Finance
    [11] => fin
    [12] => 1
    [13] => Human Resource
    [14] => hr
    [15] => 3
    [16] => Information Technology
    [17] => it
)

This is obvious output but I need to know how can I get return multidimensional array.

Upvotes: 0

Views: 205

Answers (3)

Nick Coons
Nick Coons

Reputation: 3692

To handle this sort of thing in my projects, I've just type-casted it:

$positions_array = (array)$positions;

This will keep your existing structure, but turn it into an array.

Upvotes: 0

Damien Pirsy
Damien Pirsy

Reputation: 25435

You can use get_object_vars():

$array = array();
foreach($positions as $pos){
  $array[] = get_object_vars($pos);
}

See it in action

Be careful of the accessibility level of the variable:

 Gets the accessible non-static properties of the given object according to scope. 

Upvotes: 1

Alma Do
Alma Do

Reputation: 37365

Your result is flat array because you're adding your elements into array via []. To fix that, add elements as array to your main array, like:

foreach($positions as $position)
{
    $array[] = [
       'id'      => $position->id,
       'label'   => $position->label,
       'position'=> $position->position
    ];
}

In PHP<5.4 there's no possibility to use [] for array definition, so then use array() instead.

Upvotes: 2

Related Questions