在多维数组存在与否时插入和替换值

时间:2017-11-26 12:05:45

标签: php arrays multidimensional-array

每次用户提交表单时,我都会尝试替换多维会话数组的初始值。数据中必须没有重复的。我在将每个表单提交的用户输入值插入会话数组的特定行和列时遇到问题。

所有代码都在一个php文件中。

<?php 
    session_start();
    $_SESSION['numbers'] = array(
        array(0,0,0,0,0), //row1
        array(0,0,0,0,0), //row2
        array(0,0,0,0,0), //row3
        array(0,0,0,0,0), //row4
        array(0,0,0,0,0) //row5
    );
?>

<?php
    if (isset($_POST["num"]) && !empty($_POST["num"])){
        $userInput = $_POST["num"];
        if(!in_array($userInput, $_SESSION['numbers'])){
            echo "<script>alert('does not exist')</script>";
            //$_SESSION['numbers'] [] = $userInput;
        }else{
            echo "<script>alert('exists')</script>";
            //don't add to array
        }
    }

        echo "<table border = 1>";
        for($row = 0; $row < sizeof($_SESSION['numbers']); $row++){
            echo "<tr>";
            for($col = 0; $col < sizeof($_SESSION['numbers']); $col++){     
                echo "<td>".$_SESSION['numbers'][$row][$col]."</td>";
            }
            echo "</tr>";
        }
        echo "</table>";    

?>

然而,如果我这样做

$_SESSION['numbers'] = $userInput;

它只用1个值替换整个多维数组,而不是将其插入到嵌套数组的特定行和列中。

如果是输入,让我们说 1 ,并且用户点击提交按钮,我在每个行和列中获得的输出只是 1

我无法将其正确插入特定行<tr>和列<td>

如果它是一维数组很容易,但我不知道如何在嵌套的多维数组中做到这一点。请帮忙。

谢谢。

1 个答案:

答案 0 :(得分:0)

每个行都有数组中的数字索引;例如,第1行是索引0,第2行是索引1,等等。您需要做的是使用特定行号提交表单,这样您就可以知道需要插入的位置。有了这些,以下将为您解决问题。

然后,您可以迭代行并将其添加(如果它尚不存在)。

foreach($_SESSION['numbers'] as $_row_index => &$_row) {
    if($_row_index == (int)$_POST['row_index']) {
        if (!in_array((int)$_POST['num'], $_row, true)) {
            $_row[] = (int)$_POST['num']; // Add the num.
        }
    }
}