替换多维会话数组的变量

replacing a variable of a multidimensional session array

我设置了一个多维会话数组。在文件顶部调用会话开始,所有字段都设置为示例

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

任何帮助或指向最佳实践正确方向的观点将不胜感激

************************ 重新编辑 ***************** ************************

感谢@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; 

I think you can not use key value pair in array_push without using array('key'=>'value') format. 在这种情况下你必须动态地做这样的事情:

以及您创建的方式 $_SESSION["activity"][]=$sports_array;。您的数组将出现在索引 ['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['activity']:

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

}
    ?>

注意:这只是为了向您展示您将如何使用原始代码。