В контроллере, в функции index() я создаю массив:
$data['current_list'] = [
'id_list' => 0,
'name_list' => "Не выбран список",
'date_list' => "0000-00-00",
'prod_list' => [
'id_product_list' => 1,
'name_product_list' => "",
'category_product_list' => "",
'amount_product_list' => 0,
'price_product_list' => 0
]
];
Как перезаписать $data['current_list']['name_list'], например, в другой функции этого же контроллера? Например, ниже есть функция:
public function func1(){
$data['current_list']['name_list'] = "Новый список";
}
Почему $data['current_list']['name_list'] не изменяется?
При подобном написании $data является локальной переменной. Чтобы она была доступна в других функциях вам следует либо передать ее туда как параметр (func1($data)), либо сделать членом класса $this->data.
Я, честно сказать, не знаком с CodeIgniter, но обычно public методы контроллера реализуют какой-то экшен, и редко вызываются друг из друга. С этой точки зрения, хотелось бы убедиться, что вы рассматриваете передачу данных в рамках выполнения одного и того же GET-запроса.
Всё потому что вы вносите изменения в массив находящийся в области видимости функции, Изменения не применяются к массиву вне функции. Есть несколько способов решить эту проблему.
Вариант 1 - Передать функции массив, внести в него изменения и ввернуть результат
function func1($data){
$data['current_list']['name_list'] = "Новый список";
return $data;
}
$data = func1($data);
Вариант 2 - Передать функции ссылку на ваш массив
function func2(&$data){
$data['current_list']['name_list'] = "Новый список";
}
func2($data);
Вариант 3 - использовать ключевое слово global (не рекомендуется)
function func3(){
global $data;
$data['current_list']['name_list'] = "Новый список";
}
func3();
Про область видимости можно прочитать в официальной документации PHP
Сборка персонального компьютера от Artline: умный выбор для современных пользователей