【问题标题】:How add elements to a multidimensional array in PHP?如何在 PHP 中向多维数组添加元素?
【发布时间】:2015-03-04 02:49:13
【问题描述】:

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

我的代码中的一个函数的目标是为现有用户添加 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”)。提前谢谢!

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

【问题讨论】:

  • 第三个?第四?关于这一小段代码的问题你自己在做什么吗?
  • @Dagon 非常不成熟和不专业。正如我提到的,这是我的代码的一小段。很抱歉打扰您并给您的生活带来如此大的压力。我们并不都是像你一样出色的程序员。

标签: php html arrays algorithm multidimensional-array


【解决方案1】:

当然,您的循环总是比较 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);
}

【讨论】:

  • 感谢您的回复!我尝试了您的功能,添加了 5 个作品,但新用户不会创建..知道为什么吗?
  • 我发现了错误,我只需要取'!'在 if 语句之外。有用!谢谢!!
【解决方案2】:

由于您的数组的第一层只有一个数字索引...您可以像这样增加一行:

$karma_score[0]['Karma'] += 5;

...但这显然有点不稳定。您可能希望将用户 ID 号用于不同的数组键。然后,您可以轻松地增加给定用户的业力。像这样:

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

如果你这样做了,那么你可以举例;

$karma_score[4]['Karma'] += 5; // Would increment Zee's karma

...没有在整个地方循环试图找到与用户 ID 匹配的行。但这在那里变得非常笨拙。您可能会考虑在某个时候将所有这些数据放入数据库中。您还可以:

$karma_score['Zee']['Karma'] += 5;

...真正摆脱不必要的循环。给你制造问题,也会给你制造更多问题…… 兄弟,需要对代码进行一些逻辑清理。 :)

【讨论】:

  • 谢谢您的回复。这是一个小项目,我正在努力让我的双手弄脏 PHP。我最终会进入数据库!
【解决方案3】:

你的问题出在:

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"));     
}

你不需要 foreach,试试我的代码:

<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);

    //if php>5.5.0 use $names = array_column($karma_score, 'NameID');
    $names = array_map(function($element){return $element['NameID'];}, $karma_score);
    if(in_array($_POST['name'], $names)) {
       $key = array_search($_POST['name'], $names);
       $karma_score[$key]['Karma'] += 5;
    } else {
      $karma_score[$counter] = 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>

【讨论】:

  • 感谢您的回复!我使用了你的函数而不是我的函数并得到了这个错误:在第 89 行调用未定义函数 array_column()。在我自己查看之前,也许你发现有问题?
  • 你需要 php >= 5.5.0
猜你喜欢
  • 1970-01-01
  • 2011-03-07
  • 2016-04-24
  • 2019-12-08
  • 2018-06-28
  • 1970-01-01
  • 1970-01-01
  • 2010-10-15
相关资源
最近更新 更多