PHP push_array 覆盖数据

PHP push_array overwrites data

很抱歉询问之前是否已经有人询问过,但是 none 这些解决方案对我有用。每次我尝试添加到数组中时,我得到的都是新数组。 请参阅下面的 PHP 代码:

<?php    
session_start();
if (!isset($_SESSION['$rNumber'])){
    $_SESSION['$rNumber'] = 0;
}

if(empty($_SESSION['words']))
{
    $_SESSION['words'] = array();
}

if (isset($_POST['button1'])){
    $random = rand(10, 20);
    $_SESSION['$rNumber'] = $_SESSION['$rNumber'] + $random;
    $word  = 'You entered a farm and earned '.$random.' golds.';
    array_push($_SESSION['words'], $word);
} else if ...

}
?>

当我 var_dump $words[] 时,它总是只有 1 个值,尽管我添加了很多次! 如果需要其他信息,请告诉我。 谢谢!

您正在使用 var_dump() 检查错误的变量,因此请尝试 var_dump($_SESSION['words']) 而不是 var_dump($words)。我试过了,它对我有用。数组推送将值 $word 添加到 $_SESSION['words'],因此您必须 var_dump $_SESSION['words'] 因为 $word 仍然只是一个字符串,而不是数组。

你也可以这样做:

$_SESSION['words'][] = 'You entered a farm and earned '.$random.' golds.';

而不是: $word = 'You entered a farm and earned '.$random.' golds.'; array_push($_SESSION['words'], $word);

更新: 来自 php.net: 注意:如果您使用 array_push() 向数组添加一个元素,最好使用 $array[] = 因为这样就没有调用函数的开销。

几个问题,正如@MarcB 所指出的,您应该为 SESSION 变量设置一个索引名称。

<?php    
session_start();
if (!isset($_SESSION['gold'])){
    $_SESSION['gold'] = 0;
}

if(empty($_SESSION['words']))
{
    $_SESSION['words'] = array();
}

if (isset($_POST['button1'])){
    $random = rand(10, 20);
    $_SESSION['gold'] += $random;
    $word = "You entered a farm and earned $random golds.";
    $_SESSION['words'][] = $word;
}
?>

感谢您的建议。我进行了这些更改并且成功了!

<?php

session_start();
if (!isset($_SESSION['$rNumber'])){
    $_SESSION['$rNumber'] = 0;
}

if(empty($_SESSION['words']))
{
    $_SESSION['words'] = array();
}


if (isset($_POST['button1'])){
    $random = rand(10, 20);
    $_SESSION['$rNumber'] = $_SESSION['$rNumber'] + $random;
    $word  = 'You entered a farm and earned '.$random.' golds.';
    array_push($_SESSION['words'], $word);
} else if...