2017-02-23 73 views
0

所以我有以下的PHP脚本中加入随机矩阵一起,以创建一个测验动态类型的问题: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 

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

+0

'$ _SESSION ['matresult [$ i] [$ j']'????? //// –

+0

[我可以在PHP的SESSION数组中使用array \ _push吗?](http ://stackoverflow.com/questions/2616540/can-i-use-array-push-on-a-session-array-in-php) –

+0

你有一个错字。 '$ _SESSION ['matresult [$ i] [$ j']'是错误的,你需要关闭最后的数组键']'。另外,'mt_rand'比'rand'更随机:-) – Martin

回答

2

我改变

$_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] . ' '; 

此代码应工作作为espected:

<?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']); 

?> 
+0

你做了什么改变?你修好了什么?编辑你的答案并改进它:-)' – Martin

+0

我编辑了答案 – Alex

+0

谢谢亚历克斯,我注意到你的原始答案你在编辑之前已经改变了什么。这样简单的修复,谢谢。 – Kieran

0

试试这个代码

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'][][].... 
+1

你做了什么改变?你修好了什么? – Martin

+0

这是错误的,我想改变我的答案。对不起 –

+0

请检查我的更新代码。它是定义哪些需要更新 –

1

确保您的会议具有有效的关键

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'][][].... 
0

你可以只把你的阵列到会话外循环:

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;