替换多维会话数组的变量

时间:2015-01-05 06:48:51

标签: php arrays session multidimensional-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; 

1 个答案:

答案 0 :(得分:0)

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]上。

IT是一个指出问题的示例但您需要通过创建动态索引来动态地遵循此操作。

<?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 [&#39; activity&#39;]:

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

}
    ?>

注意:这只是为了说明您将如何处理原始代码。