2016-09-06 3 views
0

У меня есть массив, как такPHP сохранить значение массива в сеансе во время цикла

[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>"; 
} 
} 

Во время цикла я хочу сохранить текущее значение «$» в сеансе, поэтому, когда пользователь обновляет страницу, на странице 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; 
} 
+0

Я не» t понять логику для старого значения '943-933 = 10'? Почему 943? – cmnardi

+0

@cmnardi это был всего лишь пример. Идея заключается в том, что у меня есть значения X и Y, Y - новое значение, а X - старое значение. Мне нужно рассчитать разницу каждый раз, когда пользователь обновляет страницу. Поэтому после каждого обновления Y будет меняться и становиться X, а Y - новым значением. – DxDogo

ответ

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 
+0

Благодарим вас за ответ. Я знаю, что мое может быть не самым простым решением, но мне просто нужна рабочая версия, прежде чем я начну улучшаться. О вашем коде вы находитесь на правильном пути, но еще не совсем там. Кажется, первые значения сохраняются в сеансе, и каждое обновление сравнивает новое значение с исходным значением. Поэтому, если исходное значение было 900, а после следующего обновления - 905, это изменение покажет +5. ОК. Но если я снова обновляюсь и значение станет 907, это изменение покажет +7, но мне нужно, чтобы он был +2 (после того, как каждая загрузка X станет Y, а X получит новое значение). Если никаких изменений не произошло, это должно быть 0. – DxDogo

+0

Получил его работу. Пришлось добавить $ _SESSION ['old_value'] [$ i] = $ value; до конца другого. Спасибо! – DxDogo

+0

Да, для вашего первого вопроса я предполагал, что вы будете обновлять сеанс каждый раз, чтобы у вас было новое изменение. Он не должен оставаться прежними ценностями навсегда. – BadHorsie

0

Как перебрать, установите все значения в массив, а затем установить массив как ваши $ _SESSION [ «old_values»].

затем сделайте что-нибудь подобное для вашего вывода.

$i = 0; 
foreach($array as $value){ 
    $value = $value - $_SESSION['old_values'][$i]; 
    $i++; 
} 
Смежные вопросы