2015-01-05 3 views
0

У меня есть многомерный массив сеансов, который установлен. начало сеанса вызывается в верхней части файла и все поля установлены в качестве примеровЗамена переменной многомерного массива сеанса

//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; 

ответ

0

I think you can not use key value pair in array_push without using array('key'=>'value') format. в этом случае вы должны сделать что-то вроде этого динамически:

и как вы создаете $_SESSION["activity"][]=$sports_array; .your массив будет приходить на индекс ['activity'][0][0].

Это пример, указывающий на проблему. Но вам нужно следовать этому динамически, создавая динамические индексы.

<?php 
$time = 'pm'; 
$date = 'feb'; 
$_SESSION['activity'][0][0]['i_time']=$time;// when already some elements are there with the key 
$_SESSION['activity'][0][0]['i_date']=$date; 
echo "<pre>"; 
print_r($_SESSION); 
echo "<pre>"; 

, если вы хотите добавить еще один массив сделать $ _SESSION [ 'деятельность']:

 $time1 = 'am'; 
     $date1 = 'mar'; 
array_push($_SESSION['activity'][$_POST['ArrayNum']],array('i_new'=>$time1,'i_new1'=>$date1));//createing new key and pussing the array. 

обновить любое значение в массиве это сделать:

проверка если:

if(isset($_SESSION['activity'][0][1]['i_time'])){// you can use foreach to access eack key value pair before if condition 
    $_SESSION['activity'][0][1]['i_time']=$newtime; 

} 
    ?> 

ПРИМЕЧАНИЕ: это только для того, чтобы показать, как вы будете это делать ваш исходный код.

+0

Привет, Сучит, спасибо за ввод. Отлично работает, когда в массиве всего 1 элемент, но добавление другого элемента массива влияет только на первую часть массива. а не соответствующей части массива. – Paddy

+0

извините, я не понимаю вас. Пожалуйста, уточните. –

+0

Итак, первый элемент массива, обработанный правильно, добавляет дату и время в соответствии с вашим кодом. Второй элемент массива воздействует только на первые элементы: дата и время 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

Смежные вопросы