Array_push не создает новый ключ, а заменяет текущее значение - PullRequest
0 голосов
/ 27 октября 2018

Я немного потерян здесь.

Так вот, что я пытаюсь сделать.У меня есть сеанс, который называется «test», я установил сеанс в виде массива каждый раз, когда устанавливается $ _POST ['process'].

$ _POST ['process'] содержит целое число, это взято из таблицы БД.

Вот мой код:

if(isset($_POST['process']))
{
  $_SESSION['test'] = array();
  $array_merge = array_push($_SESSION['test'], $_POST['process']);
}

Это работает в первый раз, вот результат:

[test] => Array ([0] => 21311)

Я ожидал, что он создаст новый ключ и назначит его другому значению, полученному из $ _POST ['process'] -но вместо этого он просто перезаписывает клавишу 0.

Что я здесь не так делаю?

С уважением

Ответы [ 2 ]

0 голосов
/ 27 октября 2018

Честно говоря, это один конкретный случай, когда использование array_push() является недостатком по сравнению с альтернативным синтаксисом в квадратных скобках.

array_push() требует, чтобы вы объявили пустой массив заранее; [] не будет И это бесполезно И это более короткое кодирование.

Более того, я почти на 100% уверен, что вы на самом деле не хотите знать количество новых элементов после нажатия. В руководстве по PHP написано :

Возвращает новое количество элементов в массиве.

... так что, если вы хотите узнать новый счет, возможно, переименуйте вашу переменную с $array_merge на $array_size или $array_count или $array_length.

Я знаю, что не хотел бы писать дополнительное условие, чтобы просто объявить пустую переменную, а затем использовать функцию для добавления нового элемента, особенно когда это можно сделать в одной строке

if(isset($_POST['process'])) {
  $_SESSION['test'][] = $_POST['process'];  // all done
}

Это будет работать в первый раз и каждый раз по желанию.

0 голосов
/ 27 октября 2018

В вашем коде вы пишете $_SESSION['test'] = array();, который сбрасывает значение $_SESSION['test'] в пустой массив. Поэтому он удалил ваше предыдущее значение и вставил новое.

Чтобы исправить эту проверку, если $_SESSION['test'] уже установлен, если это не так $_SESSION['test'] = array();, в противном случае просто введите новые значения.

Полный пример:

if(isset($_POST['process'])) {
    if(!isset($_SESSION['test'])) {
        $_SESSION['test'] = array();
    }

    $array_merge = array_push($_SESSION['test'], $_POST['process']);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...