Array_push不创建新键,而是替换当前值

时间:2018-10-27 19:42:35

标签: php arrays forms session

我有点迷路了。

这就是我想要做的。 我有一个会话,称为“测试”,每次设置$ _POST ['process']时,我都将会话设置为数组。

$ _ POST ['process']包含一个从数据库表中获取的整数。

这是我的代码:

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

它是第一次工作,结果如下:

  

[test] =>数组           (               [0] => 21311           )

我期望它会创建一个新密钥,并将其分配给从$ _POST ['process']获取的另一个值-但它只会覆盖0密钥。

我在这里做什么错了?

亲切的问候

2 个答案:

答案 0 :(得分:1)

在您的代码中,您正在编写#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QChart> #include <QLineSeries> #include <QMainWindow> #include <QValueAxis> #include <QtCharts/QChart> #include <QtCharts/QLineSeries> QT_CHARTS_USE_NAMESPACE namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = nullptr); ~MainWindow(); private: Ui::MainWindow *ui; QChart* chart = nullptr; QLineSeries* serie = nullptr; int threshold = 5; private slots: void onAddPointButtonClicked(); void onPointAdded(int index); }; #endif // MAINWINDOW_H ,它将#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); chart = new QChart; serie = new QLineSeries(this); connect(ui->bt_addPoint, SIGNAL(clicked()), this, SLOT(onAddPointButtonClicked())); connect(serie, SIGNAL(pointAdded(int)), this, SLOT(onPointAdded(int))); chart->legend()->hide(); chart->addSeries(serie); ui->graphicsView->setChart(chart); } MainWindow::~MainWindow() { delete ui; } void MainWindow::onAddPointButtonClicked() { serie->append(0, 1); } void MainWindow::onPointAdded(int index) { while (serie->points().length() >= threshold) serie->remove(0); } 的值重置为一个空数组。因此,它删除了您以前的值,并放入了新值。

要解决此问题,请检查是否已设置$_SESSION['test'] = array();,如果尚未设置$_SESSION['test'],则只需插入新值即可。

完整示例:

$_SESSION['test']

答案 1 :(得分:0)

老实说,这是一种精确的情况,其中使用array_push()相对于其替代的方括号语法是不利的。

array_push()要求您提前声明空数组; []不会并且它是无功能的,并且编码更简短。

此外,我几乎100%地确定您实际上不希望在推送后知道新元素的数量。 PHP Manual says

  

返回数组中新的元素数。

...因此,如果您确实想知道新的计数,则可以将变量从$array_merge重命名为$array_size$array_count$array_length

我知道我不想写一个额外的条件,只是声明一个空变量,然后使用一个函数添加一个新元素,尤其是当它可以在一行中完成时

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

这将在第一次和每次需要的时候起作用。