0

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.

3 Answers 3

2

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.

Sign up to request clarification or add additional context in comments.

3 Comments

This works nice just wonder why my editor showing me syntax error for array box.. but not in browser output.. may be editor doesn't support latest version of PHP?
@JatinSoni yes, that also may be (upgrade it then)
That's your decision. Because get_object_vars() is more flexible (i.e. will do stuff automatically) - but on the other hand, explicitly recounting of array keys is good because you'll know exactly which keys will be in result array (so if something will change, that will not affect your result)
1

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. 

2 Comments

This gives the same output as Alma Do code.. just wonder which method is the best for future proof and error resistance?
See @Alma Do comment, mainly it's a matter of control you want to have over the content
0

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.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.