PHP数组仅显示最后一次推送的值

PHP数组仅显示最后一次推送的值,php,Php,我制作了一个php脚本,您必须在其中向bucketlist添加内容,但它不能正常工作。 脚本需要输出bucketlist,但它只输出最后输入的值 <?php echo "How much activities would you like to add?\n"; $a = readline (); $d = "What do you want to add to your bucket list?\n"; if (is_numeric($a)) {

我制作了一个php脚本,您必须在其中向bucketlist添加内容,但它不能正常工作。 脚本需要输出bucketlist,但它只输出最后输入的值

<?php
echo "How much activities would you like to add?\n";
$a = readline ();
$d = "What do you want to add to your bucket list?\n";

if (is_numeric($a)) {
    for ($x = 1; $x <= $a; $x++) {
        echo $d;
        $c = readline();
    }
} else {
    echo "'$a' isn't a number, try again.";
    exit;
}

$bucketlist = [$c];
array_push($bucketlist);

foreach ($bucketlist as $z) {
    echo "On your bucket list:\n";
    echo $z;
    echo "\n";
}
?>

在for循环的每次迭代中,
$c=readline()
正在读取一个新值,但未将其添加到
$bucketlist=[]
您将丢失该值,因此您还需要在每次迭代中将
$c
的值添加到
$bucketlist[]
中,并且必须在for循环内将
$c
的值添加到
$bucketlist[]

  • 定义
    $bucketlist=[]作为数组
  • 使用
    array\u push($bucketlist,$c)
    $bucketlist[]=$c
  • echo“您希望添加多少活动?\n”;
    $a=读线();
    $d=“您想在您的存储桶列表中添加什么?\n”;
    $bucketlist=[];
    如果(是数字($a)){
    对于($x=1;$x)
    
    $bucketlist=[$c];
    发生在循环之外,因此它只能访问循环结束时的
    $c

    将其移动到
    for
    循环中,并使其显示
    $bucketlist[]=$c;
    ,以便将其附加到bucketlist,而不是覆盖它

    而且你不需要你的
    array\u push
    行(我认为它没有做任何事情,因为你没有指定任何东西来推入数组)

    在开始循环之前,还应将
    $bucketlist
    定义为空数组

    echo "How much activities would you like to add?\n";
    $a = readline ();
    $d = "What do you want to add to your bucket list?\n";
    $bucketlist = array();
    
    if (is_numeric($a)) {
        for ($x = 1; $x <= $a; $x++) {
            echo $d;
            $c = readline();
            $bucketlist[] = $c;
        }
    } else {
        echo "'$a' isn't a number, try again.";
        exit;
    }
    
    foreach ($bucketlist as $z) {
        echo "On your bucket list:\n";
        echo $z;
        echo "\n";
    }
    
    echo“您希望添加多少活动?\n”;
    $a=读线();
    $d=“您想在您的存储桶列表中添加什么?\n”;
    $bucketlist=array();
    如果(是数字($a)){
    
    对于上述作者提到的($x=1;$x),循环内部发生了
    $c=readline();
    ,因此每次迭代都会覆盖它。请尝试以下方法:

    echo "How much activities would you like to add?\n";
    $a = readline ();
    $d = "What do you want to add to your bucket list?\n";
    $bucketlist = [];
    if (is_numeric($a)) {
        for ($x = 1; $x <= $a; $x++) {
            echo $d;
            $c = readline();
            array_push($bucketlist, $c);
        }
    } else {
        echo "'$a' isn't a number, try again.";
        exit;
    }
    
    foreach ($bucketlist as $z) {
        echo "On your bucket list:\n";
        echo $z;
        echo "\n";
    }
    ?>
    
    echo“您希望添加多少活动?\n”;
    $a=读线();
    $d=“您想在您的存储桶列表中添加什么?\n”;
    $bucketlist=[];
    如果(是数字($a)){
    对于($x=1;$x)
    
    array\u push($bucketlist)需要两个参数您试过调试这个问题吗?
    bucketlist=[$c];发生在一个循环中
    ,不,这不是我说的,也不是OP的代码中发生的。请仔细阅读。但是,您的实际解决方案很好(尽管它与已经发布的解决方案没有区别)。好的。您的代码可以工作,但有趣的是,手册()上说:
    注意:如果您使用array_push()向数组中添加一个元素,最好使用$array[]=因为这样就没有调用函数的开销。
    它仍然不能正常工作。现在它输出:您想添加多少活动?2您想添加什么到您的存储桶列表中?a您想添加什么到存储桶列表中?w在存储桶列表中:a在存储桶列表中:w但正确的输出必须是:How much活动您想添加什么?2您想添加什么到您的存储桶列表中?a您想添加什么到您的存储桶列表中?w在您的存储桶列表中:您必须删除存储桶列表的最后一个foreach并将其替换为存储桶列表中的
    echo:\n。内爆(“,”,$bucketlist)
    非常感谢dopesky,所有其他人,也谢谢你们。你们都是一个很好的帮助!:)这会起作用,但有趣的是,手册()上说
    注意:如果使用array_push()向数组中添加一个元素,最好使用$array[]=因为这样就没有调用函数的开销。
    @ADyson以正确的方式更新了代码
    echo "How much activities would you like to add?\n";
    $a = readline ();
    $d = "What do you want to add to your bucket list?\n";
    $bucketlist = [];
    if (is_numeric($a)) {
        for ($x = 1; $x <= $a; $x++) {
            echo $d;
            $c = readline();
            array_push($bucketlist, $c);
        }
    } else {
        echo "'$a' isn't a number, try again.";
        exit;
    }
    
    foreach ($bucketlist as $z) {
        echo "On your bucket list:\n";
        echo $z;
        echo "\n";
    }
    ?>