首页 > 解决方案 > 在php中将新元素插入多维数组

问题描述

<?php
  $accounts = [["felh" => "minta", "password" => "Meow123", "mail" => "pelda@gmail.com"],
  ["felh" => "minta2", "password" => "Meow1232", "mail" => "pelda2@gmail.com"]];
 if (isset($_POST["regisztral"])) {
    $username = $_POST["felh"];
    $password = $_POST["password"];
    $email = $_POST["mail"];
    $password2 = $_POST["password2"];
       if (strlen($password) < 8)
       die("<b>error<b>");
       if ($password !== $password2)
       die("<b>error</b>");
        if ($_POST['feltetel'] != 'igen') die("<b>error</b>");
        foreach ($accounts as $account) {
        if ($account["felh"] === $username)     die("<b>error:</b> taken!");
         if ($account["mail"] === $email)     die("<b>error:</b>taken!");
        }

            $accounts[] = ["felh" => $username, "password" => $password, "mail" => $email];
        $file = fopen("accounts.txt", "w");
             foreach ($accounts as $account)
             fwrite($file, serialize($account) . "\n");
             fclose($file);

     echo "<br>Succeed<br/>";
     }

用户必须填写注册表,我的程序应该决定是否使用他的用户名和电子邮件地址。我想将所有用户名、密码和电子邮件地址排序为二维数组,然后将其写入文本文件。我的问题是,每次我在数组中插入一条新记录时,它都会将最后一个元素切换到我刚刚插入的那个,而不是保留它并将新元素添加到数组的末尾。我该如何解决?

*编辑我上传了我的代码的整个 php 部分。需要明确的是,我的问题如下:我在代码开头手动添加的 2 条记录完美运行。当我想插入时,让我们说 cat aaaaaaaa 和 nothing@gmail.com 它工作得很好。但是当我在那之后提交另一个值时,比如说 dog bbbbbbbb 和 something@gmail.com,它会将 cat aaaaaaaaa 和 nothing@gmail.com 切换为 dog bbbbbbbb 和 something@gmail.com。但是我想要的是保留 cat aaaaaaaa nothing@gmail.com 然后将 dog bbbbbbbb something@gmail.com 添加到数组的末尾

标签: phphtmlarrays

解决方案


对您造成问题的是 php 函数 fopen() 和模式。目前在您使用模式'w'的代码中,通过php手册该模式是:

仅供写作;将文件指针放在文件的开头并将文件截断为零长度。如果该文件不存在,请尝试创建它。

每次用新数据覆盖这个名为 accounts.txt 的文件时。

所以你应该使用模式'a'将指针放在文件末尾并附加新数据。

仅供写作;将文件指针放在文件末尾。如果该文件不存在,请尝试创建它。在这种模式下, fseek() 没有效果,写入总是附加的。

测试:https ://repl.it/@kallefrombosnia/DiscreteOnerlookedLists


推荐阅读