class Converter
{
public static function toObject(array $array, $object)
{
$class = get_class($object);
$methods = get_class_methods($class);
foreach ($methods as $method) {
preg_match(' /^(set)(.*?)$/i', $method, $results);
$pre = $results[1] ?? '';
$k = $results[2] ?? '';
$k = strtolower(substr($k, 0, 1)) . substr($k, 1);
If ($pre == 'set' && !empty($array[$k])) {
$object->$method($array[$k]);
}
}
return $object;
}
}
To test this converter class, we need to create a class with properties and methods (getters & setters) and see how to convert an array to object using PHP in action.
Let’s assume that we have an employee class like this:
class Employee
{
protected $name;
protected $phone;
protected $email;
protected $address;
public function getName()
{
return $this->name;
}
public function getPhone()
{
return $this->phone;
}
public function getEmail()
{
return $this->email;
}
public function getAddress()
{
return $this->address;
}
public function setName($name)
{
$this->name = $name;
}
public function setPhone($phone)
{
$this->phone = $phone;
}
public function setEmail($email)
{
$this->email = $email;
}
public function setAddress($address)
{
$this->address = $address;
}
}
Convert Array To Object
Now let’s create an array that will hold the data that will be transferred to the class.
$arr['name'] = "Adam";
$arr['phone'] = "123456";
$arr['email'] = "[email protected]";
$arr['address'] = "U.S";
Great, let’s convert the array data to the class.
$obj = Converter::toObject($arr, new Employee());
var_dump($obj);
Look at the result:
Cool!!
You can convert an array to object using PHP hydrator pattern.
Convert Object to Associative Array
What about converting the object to an associative array, it’s the same concept, we are going to create a new function that does the opposite.
Our function will search for all get() functions the same way as the previous function like this:
public static function toArray($object)
{
$array = array();
$class = get_class($object);
$methods = get_class_methods($class);
foreach ($methods as $method) {
preg_match(' /^(get)(.*?)$/i', $method, $results);
$pre = $results[1] ?? '';
$k = $results[2] ?? '';
$k = strtolower(substr($k, 0, 1)) . substr($k, 1);
If ($pre == 'get') {
$array[$k] = $object->$method();
}
}
return $array;
}
Add this function to our converter class and call it with a passed object like this:
var_dump(Converter::toArray($obj));
Note that the passed $obj here is the generated object from the array to object conversion process.
The output shows the associative array as expected.
I hope you find the post useful. Keep coming back.
Thank you.