PHP Variable variables doesn't work as expected with arrays

66 Views Asked by At

i'm trying to create a twig function that insert a new value in a associated array using variable variables but when i print the new value, the value doesn't appear, showing me an error that says 'key MynewKey doesn't exist'.

i am supposing that its a reference value problem.

/**
 * add a value to your twig array instead of using merge
 *
 * @param $originalArray  Array or object(public access) to set a new value
 * @param $value value to be inserted
 * @param string $Key arrayKey/objec associated name
 * @param string $sKey subarrayKey associated name
 * 
 */ 
public function arrayKeyValueSetter($originalArray, $value, $Key, $sKey= null, $ssKey= null, $sssKey= null, $ssssKey= null, $sssssKey = null){
    $array = $originalArray;
    $realKey = "Key";
    $arrayKeys = "";

    for ($i=0; $i < 5 ; $i++) { 
        if(!empty($$realKey)){
            if(strpos($$realKey,"array_") !== false) {
                $$realKey = str_replace("array_", "", $$realKey);
                $arrayKeys .= "['" . $$realKey . "']";
            }else{
                $arrayKeys .= "->" . $$realKey;
            }
        }
        $realKey = "s". $realKey;
    }

    $realArray = 'array'; #variable name
    $realArrayAccess = $realArray . $arrayKeys;  #variable name with access "foo['var']->access->['new']"
    $$realArrayAccess = $value; #setting the new value $foo['var']->access->['new'] = value

    return $array;
}

twig

{% if value is defined and value is not null %}
    {% set form = form|array_key_value_setter(value.id, 'children','array_media','vars','array_contentHasMediaId') %}
{% endif %}

example: i want to create a new key with a new value in this object(has public access) that cotains arrays expected result:

dump(form.children.media.vars.contentHasMediaId) #output: value inserted

actual

dump(form.children.media.vars.contentHasMediaId) #error: key contentHasMediaId doesn't exist

maybe it is not the best way to add a new value to a twig array, but i tried to omit the use of merge() function that is limited adding specific values to associated names,and that's why i tried to create a function that replace twig merge() function.

0

There are 0 best solutions below