php - 如何在 PHP 中向多维数组添加元素?

标签 php html arrays algorithm multidimensional-array

我一直在这个论坛和其他在线论坛上对这个问题进行一些研究,但我似乎无法弄清楚。

我的代码中的一个功能的目标是为现有用户添加 5 个业力点,或者如果用户不在,则创建一个业力得分为“1”的新用户。用户将在表单中输入用户名和 ID 号,然后该信息将发送到我的 php 脚本。该函数使用该信息发挥其魔力,但输出是错误的。

我得到的是一个业力得分为“6”的新用户。我遗漏了一些与此事无关的脚本。

如有任何帮助或建议,我们将不胜感激。

<html>

<head></head>

<body>
<div align="center">
<?php

// Array begin 
$karma_score = array(   array("Userid" => 1, "NameID" => 'Doe', "Karma" => 45, "LastLogin" => "2012-08-30"),
                        array("Userid" => 2, "NameID" => 'Smith', "Karma" => 123, "LastLogin" => "2012-09-02"),
                        array("Userid" => 3, "NameID" => 'Chan', "Karma" => 1, "LastLogin" => "2011-12-23"),
                        array("Userid" => 4, "NameID" => 'Zee', "Karma" => 15, "LastLogin" => "2012-07-01"));

// Counter for amount of users
$counter = count($karma_score);

// Function to print general array
function printArray($a){
    echo '<table border="1px">';
    echo '<tr>';
        foreach(array_keys($a[0]) as $head){
            echo '<th>'.$head.'</th>';
        }
    echo '</tr>';

    foreach($a as $b) {
    echo '<tr>';
        echo '<td>'.$b['Userid'].'</td>';
        echo '<td>'.$b['NameID'].'</td>';
        echo '<td>'.$b['Karma'].'</td>';
        echo '<td>'.$b['LastLogin'].'</td>';
    echo '</tr>';
    }
    echo '</table>';
}

echo '<br>';

function findInfo()
{
    global $karma_score;
    $counter = count($karma_score);

        foreach ($karma_score as $key => $b) {
            if ($b['NameID'] === $_POST['name'])
                $karma_score[$key]["Karma"] += 5;
            else 
                $karma_score[$counter+1] = array("Userid" => $_POST['id'], "NameID" => $_POST['name'], "Karma" => 1, "LastLogin" => date("Y-m-d"));     
        }
    echo "<br> Here is your updated table.";
    printArray($karma_score);
}

if (isset($_POST['submit'])) {
    findInfo();
}

?>

<br>


Please enter name and id. If name exists, add 5. If not, add user.
<form action="" method="POST">
    Name: <input type="text" name="name" placeholder="Enter Name Here">
    ID: <input type="text" name="id" placeholder="Enter ID #">
    <input type="submit" name="submit">


</div>
</body>

</html>

下面是我的输出:第四张表是我点击提交时得到的(我输入的用户是“Alec”,我输入的 ID 是“5”)。提前致谢!

enter image description here

编辑:当我提交一个已经在数组中的用户时会发生这种情况。我想要的结果是用户的业力分数加 5。

enter image description here

最佳答案

当然,你的循环总是比较 NameID 如果不匹配,你将元素添加到数组,而元素 NameID 的值并不总是与你看起来的值相同为了。在您的循环中,使用相同的键 [5] ($count + 1) 向元素数组添加了 3 次(在与您的值比较不匹配的值中,以防万一,您提交了现有值)。 因此您可以创建表明您提交的值存在的变量。

function findInfo(){
    global $karma_score;
    $counter = count($karma_score);
    $isExist = false;
    foreach ($karma_score as $key => $b) {
        if ($b['NameID'] === $_POST['name']){
            $karma_score[$key]["Karma"] += 5;
            $isExist = true;
        }
    }
    if(!isExist)
        $karma_score[$counter+1] = array("Userid" => $_POST['id'], "NameID" => $_POST['name'], "Karma" => 1, "LastLogin" => date("Y-m-d"));     
    echo "<br> Here is your updated table.";
    printArray($karma_score);
}

关于php - 如何在 PHP 中向多维数组添加元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28845849/

相关文章:

javascript - 如何使用javascript查找子页面元素

c++ - 使用指向数组的指针来填充动态数组

javascript - 用粒子 Canvas 填充形状

javascript - 在 HTML5 canvas 上绘图的最佳实践、技巧和陷阱是什么

php - 显示数据库中的图表数据

java - 将 java 转换为 php - 使用 keystore.jks 文件进行 AES 加密

c++ - 删除包含重复项的动态指针数组

c中二维数组中整数的连续间隔输入

php - 学生列表的复杂 mysql 连接

php - 没有从 Mysqli 获取行