当我添加PHP Array时,它会不断被覆盖...为什么?

时间:2018-08-22 12:00:53

标签: php arrays

由于某种原因,每当我尝试向数组中添加某些内容时,它只会覆盖索引0,而不是覆盖索引1、2等...

这是我的代码

//Saved names
    session_start();
    $saved_names = array();

    $_SESSION['saved_names'] = $saved_names;

    if($_GET['saved_name']){

    $saved_name = $_GET['saved_name'];

    $saved_names[] = $saved_name;        
}
    echo '<pre>', print_r($saved_names, true), '</pre>';

3 个答案:

答案 0 :(得分:3)

$_SESSION['saved_names'] = $saved_names;

这行正确吗?你是说

$saved_names = $_SESSION['saved_names'];

您正在重置会话数组并仅保存一个元素,该数组将始终具有长度1。

答案 1 :(得分:0)

session_start();

if($_GET['saved_name']){

    $_SESSION['saved_names'][] = $_GET['saved_name'];
}
echo '<pre>', print_r($_SESSION['saved_names'], true), '</pre>';

答案 2 :(得分:0)

其他答案还可以,但是我更喜欢这种解决方案,它还会检查会话是否刚刚开始(因此尚未设置$_SESSION['saved_names']):

<?php
session_start();
$_SESSION['saved_names'] = isset( $_SESSION['saved_names']) ?  $_SESSION['saved_names'] : [];

if($_GET['saved_name']){
  $_SESSION['saved_names'][] = $_GET['saved_name'];
}
echo '<pre>', print_r($_SESSION['saved_names'], true), '</pre>';
?>

修改
@elitepc解决方案(如他所说)不起作用,因为

$saved_names = array(); /empty array
$saved_names = $_SESSION['saved_names'];  / <- it has not been declared also will never update

然后

$saved_name = $_GET['saved_name'];
$saved_names[] = $saved_name;

因此,基本上每次它只创建一个空数组并将其放入$_GET值内。

您必须检查会话变量是否已初始化,并以$_GET值进行更新