У меня есть многомерный массив сеансов, который установлен. начало сеанса вызывается в верхней части файла и все поля установлены в качестве примеровЗамена переменной многомерного массива сеанса
//set variables
$locked="unlocked";$name="BMX";$sport_activity="sport";$quantity="1";$price="600";
//set variables to array
$sports_array = array(0 => array(
'i_locked' => $locked,
'i_name' => $name,
'i_quantity' => $quantity,
'i_price' => $price,
'i_sport_activity' => $sport_activity,
'i_base_price' => $price));
//set multidimensional session array
$_SESSION["activity"][] = $sports_array;
Затем массив называется в цикле PHP.
$arrayID = -1;
//foreach loop
foreach($_SESSION['activity'] as $key){
foreach($key as $list){
$arrayID += 1;
?>
//echo all the array items individually in separate divs
<form>
<div>
<?php echo $list['i_locked']?>
</div>
// ..... etc
<input type="hidden" name="ArrayNum" value="<?=$arrayID?>">
<input type='submit' name='Confirm_button'>
</form>
Все это работает, что я хотел бы сделать, это то изменить переменную и добавить новые.
Я столкнулся с array_push() для добавления новых полей в массив. И я попробовал следующее ниже, но либо он добавляет массив массива, либо удаляет стек массива.
if(isset($_POST["Confirm_button"])){
$time = 'pm';
$date = 'feb';
$_SESSION['activity'][$_POST['ArrayNum']]['i_locked'] = 'locked';
array_push($_SESSION['activity'][$_POST['ArrayNum']],'i_time'=>$time,'i_date'=>$date);
}
Любая помощь или точку в правильном направлении для наилучшей практики были бы весьма признательны
*********************** ** Re-Edit ****************************************
Кредит to @Suchit Kumar Удалось устранить проблему, основываясь на его помощи.
Первая проблема с изменением элемента массива работает со следующим кодом. И правильно находит элемент, который нуждается в изменении.
$_SESSION['activity'][$_POST['ArrayNum']][0]['i_locked'] = 'locked';
Вторая проблема добавления новых элементов в массив работает со следующим кодом.
$time = 'pm';
$date = 'feb';
$_SESSION['activity'][$_POST['ArrayNum']][0]['i_time'] = $time;
$_SESSION['activity'][$_POST['ArrayNum']][0]['i_time'] = $date;
Привет, Сучит, спасибо за ввод. Отлично работает, когда в массиве всего 1 элемент, но добавление другого элемента массива влияет только на первую часть массива. а не соответствующей части массива. – Paddy
извините, я не понимаю вас. Пожалуйста, уточните. –
Итак, первый элемент массива, обработанный правильно, добавляет дату и время в соответствии с вашим кодом. Второй элемент массива воздействует только на первые элементы: дата и время 1 элемент в массиве и дополнительные элементы, добавленные в дату, мы поместили date1 и во времени мы помещаем time1 в качестве примеров, то это то, что печатает массив [0] = (i_locked = hi, i_sport = 'more', i_date = 'date1', i_time = 'time1'); Однако, когда 2 элемента находятся в массиве, и мы устанавливаем 2-й набор на дату2 и время2 array [0] = (i_locked = hi, i_sport = 'more', i_date = 'date2', i_time = 'time2') ; массив [1] = (i_locked = hi, i_sport = 'more'); – Paddy