【问题标题】:PHP multidimensional arrays using SESSION variables使用 SESSION 变量的 PHP 多维数组
【发布时间】:2017-02-23 22:14:15
【问题描述】:

所以我将以下 PHP 脚本添加到随机矩阵中,以便为测验创建动态类型的问题:

<?php
      $min = 0;
      $max = 10;

      $a1 = rand($min, $max);
      $b1 = rand($min, $max);
      $c1 = rand($min, $max);
      $d1 = rand($min, $max);

      $a2 = rand($min, $max);
      $b2 = rand($min, $max);
      $c2 = rand($min, $max);
      $d2 = rand($min, $max);

      $matrixa = array(
          array($a1,$b1),
          array($c1, $d1)
      );
      $matrixb = array(
          array($a2,$b2),
          array($c2, $d2)
      );                      

      for ($i=0; $i<2; $i++){
          for ($j=0; $j<2; $j++){
               $matresult[$i][$j] = $matrixa[$i][$j] + $matrixb[$i][$j];
               echo $matresult[$i][$j] . ' ';     
          }
          echo '<br>';
      }  
var_dump($matresult);
?>

这有效,并正确存储值,因此输出如下:

16 4
4 8
array(2) { [0]=> array(2) { [0]=> int(16) [1]=> int(4) } [1]=> array(2) { [0]=> int(4) [1]=> int(8) } } 

(例如)

现在,当我尝试在同一个 for 循环中使用会话变量时:

for ($i=0; $i<2; $i++){
    for ($j=0; $j<2; $j++){
        $_SESSION['matresult[$i][$j'] = $matrixa[$i][$j] + $matrixb[$i][$j]; 
        echo $_SESSION['matresult[$i][$j]'] . ' ';
    }
    echo '<br>';
}  
var_dump($_SESSION['matresult']);

输出如下:

16 4
4 8
NULL

我不明白为什么会这样,代码和逻辑完全一样,我错过了什么?

【问题讨论】:

  • $_SESSION['matresult[$i][$j'] ?????////
  • 你有一个错字。 $_SESSION['matresult[$i][$j'] 错误,您需要关闭最后的数组键 ]。此外,mt_randrand 更随机:-)
  • 您应该使用双引号,以便在字符串中获得变量插值。您还缺少一个右方括号。
  • 为轻微的语法错误道歉,这是创建问题时的拼写错误,我项目中的代码是无语法的。不过感谢提醒。

标签: php arrays session multidimensional-array


【解决方案1】:

我变了

    $_SESSION['matresult[$i][$j'] = $matrixa[$i][$j] + $matrixb[$i][$j]; 
    echo $_SESSION['matresult[$i][$j]'] . ' ';

    $_SESSION['matresult'][$i][$j] = $matrixa[$i][$j] + $matrixb[$i][$j]; 
    echo $_SESSION['matresult'][$i][$j] . ' ';

这段代码应该可以正常工作:

<?php

   ....

    for ($i=0; $i<2; $i++){
        for ($j=0; $j<2; $j++){
            $_SESSION['matresult'][$i][$j] = $matrixa[$i][$j] + $matrixb[$i][$j]; 
            echo $_SESSION['matresult'][$i][$j] . ' ';
        }
        echo '<br>';
    }  
    var_dump($_SESSION['matresult']);

?>

【讨论】:

  • 你做了哪些改变?你修了什么?编辑您的答案并改进它:-)
  • 谢谢亚历克斯,我注意到您在编辑之前所做的更改与您的原始答案一样。如此简单的修复,谢谢。
【解决方案2】:

确保您的会话具有有效的密钥

for ($i=0; $i<2; $i++){
    for ($j=0; $j<2; $j++){
        $_SESSION['matresult'][$i][$j] = $matrixa[$i][$j] + $matrixb[$i][$j]; 
        echo $_SESSION['matresult'][$i][$j] . ' ';
    }
    echo '<br>';
}  
var_dump($_SESSION['matresult']);

这是主索引,所以当你想添加更多时,然后像这样定义

$_SESSION['matresult'][][]....

【讨论】:

    【解决方案3】:

    试试这个代码

    for ($i=0; $i<2; $i++){
    for ($j=0; $j<2; $j++){
        $_SESSION['matresult'][$i][$j] = $matrixa[$i][$j] + $matrixb[$i][$j]; 
        echo $_SESSION['matresult'][$i][$j] . ' ';
    }
    echo '<br>';
     }  
    var_dump($_SESSION['matresult']);
    

    这是主索引,所以当你想添加更多然后像这样定义

    $_SESSION['matresult'][][]....
    

    【讨论】:

    • 你做了哪些改变?你修复了什么?
    • 这是错误的,我想改变我的答案。对不起
    • 请检查我的更新代码。它定义了哪些需要更新
    • 当我尝试更新我的代码但如何更新其他答案时,为什么会发生这种情况。答案是更新,在这个问题中也是错误的
    【解决方案4】:

    你可以把你的数组放到循环外的会话中:

      for ($i=0; $i<2; $i++){
          for ($j=0; $j<2; $j++){
               $matresult[$i][$j] = $matrixa[$i][$j] + $matrixb[$i][$j];
               echo $matresult[$i][$j] . ' ';     
          }
          echo '<br>';
      }
    
      $_SESSION['matresult'] = $matresult;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多