- array_filter: documentation ( source)
- array_keys: documentation ( source)
<?php
class ObjContainer {
public function ObjEval($method) {
eval($this->$method.';');
}
}
function isArrayAssociative(array $array) {
return (bool) count(array_filter(array_keys($array), 'is_string'));
}
function Array2Obj(array $array) {
if(isArrayAssociative($array)) {
$obj = new ObjContainer;
foreach($array as $key => $val) {
if(is_array($val)) {
$obj->{$key} = Array2Obj($val);
}
else {
$obj->{$key} = $val;
}
}
return $obj;
}
else {
$array = array();
foreach($array as $val) {
if(is_array($val)) {
$array[] = Array2Obj($val);
}
else {
$array[] = $val;
}
}
return $array;
}
}
$array = array(
'myVar' => '',
'setVar' => function ($arg) {
$this->{'myVar'} = $arg;
},
'getVar' => function () {
return $this->{'myVar'};
}
);
$obj = Array2Obj($array);
$obj->ObjEval("\${'setVar'}('foo')");