I have a huge array in which keys are also not constant in most of the cases, but there are 3 keys that always constant (#name,#default_value,#value) and #default_value and #value is different i want to get these kind of sub arrays in 1 simple array , for this purpose i am using recursion in whole array and checking out if these 3 keys are present there i can print these values inside recursion easily but I am not able to get those values in return. So that i can precess them further.
$form=array(); $form['field_one']['#name']="field_one"; $form['field_one']['#default_value']="old"; $form['field_one']['#value']="new"; $form['field_two']['#name']="field_two"; $form['field_two']['#default_value']="old"; $form['field_two']['#value']="new"; $form['field_three']['#name']="field_three"; $form['field_three']['#default_value']="old"; $form['field_three']['#value']="old"; $form['thiscouldbeanotherarray']['idk']['field_four']['#name']="field_four"; $form['thiscouldbeanotherarray']['idk']['field_four']['#default_value']="old"; $form['thiscouldbeanotherarray']['idk']['field_four']['#value']="new"; $arr_get = get_updatedvalues($form,array()); var_dump($arr_get); function get_updatedvalues($form,$fields) { if (!is_array($form)) { return; } foreach($form as $k => $value) { if(str_replace('#','',$k) =='default_value' && ($form['#default_value'] != $form['#value'] ) ){ $fields['field'][$form['#name']] = array("name" => $form['#name'],"old_value" =>$form['#default_value'],"new_value" =>$form['#value']); var_dump($fields); } get_updatedvalues($value,$fields); } return $fields; }
If you run this code it will give you $arr_get > array (size=0), there i need all three values
Advertisement
Answer
If I understand correctly, you need to pass fields
as a reference in order to change it:
function get_updatedvalues($form, &$fields) {
To do that, however, you’ll need to change your initial call so that you have a variable to pass as the reference:
$array = []; $arr_get = get_updatedvalues($form,$array);
Running this I get:
Array ( [field] => Array ( [field_one] => Array ( [name] => field_one [old_value] => old [new_value] => new ) [field_two] => Array ( [name] => field_two [old_value] => old [new_value] => new ) [field_four] => Array ( [name] => field_four [old_value] => old [new_value] => new ) ) )