Convert a PHP Object to an Associative Array

Convert a PHP object to an associative array

Just typecast it

$array = (array) $yourObject;

From Arrays:

If an object is converted to an array, the result is an array whose elements are the object's properties. The keys are the member variable names, with a few notable exceptions: integer properties are unaccessible; private variables have the class name prepended to the variable name; protected variables have a '*' prepended to the variable name. These prepended values have null bytes on either side.

Example: Simple Object

$object = new StdClass;
$object->foo = 1;
$object->bar = 2;

var_dump( (array) $object );

Output:

array(2) {
'foo' => int(1)
'bar' => int(2)
}

Example: Complex Object

class Foo
{
private $foo;
protected $bar;
public $baz;

public function __construct()
{
$this->foo = 1;
$this->bar = 2;
$this->baz = new StdClass;
}
}

var_dump( (array) new Foo );

Output (with \0s edited in for clarity):

array(3) {
'\0Foo\0foo' => int(1)
'\0*\0bar' => int(2)
'baz' => class stdClass#2 (0) {}
}

Output with var_export instead of var_dump:

array (
'' . "\0" . 'Foo' . "\0" . 'foo' => 1,
'' . "\0" . '*' . "\0" . 'bar' => 2,
'baz' =>
stdClass::__set_state(array(
)),
)

Typecasting this way will not do deep casting of the object graph and you need to apply the null bytes (as explained in the manual quote) to access any non-public attributes. So this works best when casting StdClass objects or objects with only public properties. For quick and dirty (what you asked for) it's fine.

Also see this in-depth blog post:

  • Fast PHP Object to Array conversion

PHP: Convert Object to Associative Array with Object Property as Key

It appears by "object" you mean a JSON object. Given that, you can use array_column() to pull out a single column from each row, and then array_combine() to use one column for the keys and another for the values:

$json = '[
{ "id": 2, "name": "Suzy" },
{ "id": 3, "name": "Joe" },
{ "id": 4, "name": "Sara" }
]';
$array = json_decode($json, true);
$out = array_combine(array_column($array, 'id'), array_column($array, 'name'));
print_r($out);

Yields:

Array
(
[2] => Suzy
[3] => Joe
[4] => Sara
)

convert array with objects to one associative array without foreach

You can use array_reduce

$myArray = array_reduce($initialArray, function ($result, $item) {
$item = (array) $item;

$key = $item['key'];
unset($item['key']);

$result[$key] = $item;

return $result;
}, array());

Converting a php object into associative array

First solution:

$array = json_decode(json_encode($nested_object), true);

Second solution:

function object_to_array($data) {

if (is_array($data) || is_object($data)):

$result = array();

foreach ($data as $key => $value)
$result[$key] = object_to_array($value);

return $result;

endif;

return $data;
}

both searched from the internetz

Convert Object To Associative Array In Laravel

In Laravel, you can use Laravel Collection helper functions. Here is the example for this:-

$arr = [
"284" => "Khaki's with Black polo shirt (no logo)",
"286" => "Black pants with Yellow shirt",
"349" => "Black pants with white collared shirt",
"705" => "See 'Details' Section for Dress Attire"
];
$collection = collect($arr);
$multiplied = $collection->map(function ($name, $key) {
return [
"id" => $key,
"name" => $name
];
});
dd($multiplied->values()->toArray());

I think this will help you.

How to convert an array to object in PHP?

This one worked for me

  function array_to_obj($array, &$obj)
{
foreach ($array as $key => $value)
{
if (is_array($value))
{
$obj->$key = new stdClass();
array_to_obj($value, $obj->$key);
}
else
{
$obj->$key = $value;
}
}
return $obj;
}

function arrayToObject($array)
{
$object= new stdClass();
return array_to_obj($array,$object);
}

usage :

$myobject = arrayToObject($array);
print_r($myobject);

returns :

    [127] => stdClass Object
(
[status] => Have you ever created a really great looking website design
)

[128] => stdClass Object
(
[status] => Figure A.
Facebook's horizontal scrollbars showing up on a 1024x768 screen resolution.
)

[129] => stdClass Object
(
[status] => The other day at work, I had some spare time
)

like usual you can loop it like:

foreach($myobject as $obj)
{
echo $obj->status;
}


Related Topics



Leave a reply



Submit