Предположим, что у меня есть массив вроде следующего:
$settings = array( "age" => "25", "data" => array( "name" => "John Dewey", "zip_code" => "00000" ) );
Вот мой вклад:
$target_directory = "data.name"; // targets $settings["data"]["name"] $new_value = "Micheal"; // I want to change // $settings["data"]["name"] with this value
Я хочу что-то похожее на следующее:
$new_array = dont_know_what_to_do($target_directory, $new_value, $settings);
print_r($new_array)
должен возвращать следующее:
Array ( [age] => 25 [data] => Array ( [name] => Micheal, "zip_code" => "00000" ) )
Это изменение должно быть полностью динамическим , что означает, что data.zip_code = "98985"
также должно изменить только значение zip-кода от 00000 до 98985 и так далее …
Вот динамический набор funciton, вы можете использовать его для установки любой глубины. Демо здесь для вас вопрос.
function set($settings, $target_directory, $new_value) { $array = explode('.', $target_directory); $ref = &$settings; while($v = current($array)) { $ref = &$ref[$v]; next($array); } $ref = $new_value; return $settings; }
$settings = array( "age" => "25", "data" => array( "name" => "John Dewey", "zip_code" => "00000" ) ); $new_value = "Micheal"; $settings["data"]["name"] = $new_value; print_r($settings);
//In your main function public function something() { $settings = array( "age" => "25", "data" => array( "name" => "John Dewey", "zip_code" => "00000" ) ); $target = 'data.name'; $input = 'Other Name' $new_arr = dont_know_what_to_do($target_dir, $input); print_r($new_arr); } //Create new function public function dont_know_what_to_do($settings, $target, $input) { $key = explode('.', $target) return $settings['data'][$key[1]] = $input; }