php在循环中保存会话中的数组值

时间:2016-09-06 17:04:40

标签: php arrays session foreach session-cookies

我有一个像这样的数组

[0] => Mike
[1] => 933
[2] => Josh
[3] => 1245
...

打印出一个像这样的表

Name    Total   Change
Mike    933     x
Josh    1245    x

使用以下脚本

$counter = 1;
$sessionID = 0;
foreach ($array as $value) {
 if(++$counter % 2 === 0) {
  echo "<tr><td class='value'>".$value."</td>";
 } else {
  echo "<td class='value'>".$value."</td>";
   $sessionID++;
  echo "<td class='update'>"x"</td>";
 }
}

循环播放时我想保存当前的&#39; $ value&#39;在一个会话中,当用户刷新页面时,x将显示$ value - $ _SESSION [$ oldvalue],例如943-933 = 10,结果将是

Name    Total   Change
Mike    943     10
Josh    1045    -200

希望你明白我要追求的是什么。以下是单个用户的工作测试版本,如果有帮助的话。到目前为止,我已经尝试过同样的想法而没有运气。

$old = ($array[1] - $_SESSION["oldvalue"]);

echo "<tr><td class='value'>".$array[0]."";
echo "</td><td class='value'>".$array[1]."";

$_SESSION["oldvalue"] = $array[1];

if ($old > 100) {
 echo "</td><td class='update'>";
 echo "<b>". $old ."</b>";
} else {
 echo "</td><td class='value'>";
 echo $old;
}

2 个答案:

答案 0 :(得分:0)

循环时,将所有值设置为数组,然后将数组设置为$ _SESSION ['old_values']。

然后为你的输出做这样的事情。

$i = 0;
foreach($array as $value){
    $value = $value - $_SESSION['old_values'][$i];
    $i++;
}

答案 1 :(得分:0)

在循环之前,只需将整个数组保存到会话中。

$_SESSION['old_values'] = $array;

然后,您可以在循环时比较两个数组,并计算更改:

foreach ($array as $i => $value) {
    if (!($i % 2)) {
        echo '<tr><td class="value">' . $value . '</td>';
    } else {
        $change = 'x';
        if (isset($_SESSION['old_value'][$i])) {
            $change = $_SESSION['old_value'][$i] - $value;
        }
        echo '<td class="update">' . $change . '</td></tr>';
    }
}

无论如何,我认为有更好的方法来做你正在做的事情。例如,如果您的数组结构如此,那么它将更可取,而且复杂得多:

[
    'Mike' => 933,
    'Josh' => 1245
]

<强>测试

<table>
    <?php
    // Current data
    $array = ['Mike', 933, 'Josh', 1245];

    // Imagine the previous array was saved to the session:
    $_SESSION['old_value'] = ['Mike', 953, 'Josh', 1235];

    // Echo the table
    foreach ($array as $i => $value) {
        $even = !($i % 2);
        if ($even) {
            echo '<tr><td class="value">' . $value . '</td>';
        } else {
            $change = 'x';
            if (isset($_SESSION['old_value'][$i])) {
                $change = $_SESSION['old_value'][$i] - $value;
            }
            echo '<td class="update">' . $change . '</td></tr>';
        }
    }

    ?>
</table>

给出:

Mike   20
Josh  -10