I have an unusual use-case I'm trying to code for. The goal is this: I want the customer to be able to provide a string, such as:
"cars.honda.civic = On"
Using this string, my code will set a value as follows:
$data['cars']['honda']['civic'] = 'On';
It's easy enough to tokenize the customer input as such:
$token = explode("=",$input);
$value = trim($token[1]);
$path = trim($token[0]);
$exploded_path = explode(".",$path);
But now, how do I use $exploded path to set the array without doing something nasty like an eval?
Based on Ugo Méda's response :
This version
Cannot create references to/from string offsets nor overloaded objects
)no fatal error example
$a
is nowUse as a getter
Set value to null
$prevVal
is "new value"$a
is nowBased on alexisdm's response :
Well tested and 100% working code. Set, get, unset values from an array using "parents". The parents can be either
array('path', 'to', 'value')
or a stringpath.to.value
. Based on Drupal's codeCan't you just do this
You can use this function:
from this library. It accepts keys both as string with dot delimeter or array.
Use the reference operator to get the successive existing arrays: