Php 更新数组中的值将使用最后插入的值更新所有值

Php 更新数组中的值将使用最后插入的值更新所有值,php,arrays,session,Php,Arrays,Session,我有两个数组,一个数组的数量称为aantal,另一个数组的产品称为producten 产品: Array ( [0] => Array ( [0] => 2 [1] => Tegel zwart [2] => Zwarte tegel 2x2m [3] => 47,5 [4] => 25 )

我有两个数组,一个数组的数量称为
aantal
,另一个数组的产品称为
producten

产品:

Array
(
    [0] => Array
        (
            [0] => 2
            [1] => Tegel zwart
            [2] => Zwarte tegel 2x2m
            [3] => 47,5
            [4] => 25
        )

    [1] => Array
        (
            [0] => 4
            [1] => Tegel lichtgrijs
            [2] => Lichtgrijze tegel 2x2m
            [3] => 40,5
            [4] => 25
        )

    [2] => Array
        (
            [0] => 2
            [1] => Tegel zwart
            [2] => Zwarte tegel 2x2m
            [3] => 47,5
            [4] => 25
        )

    [3] => Array
        (
            [0] => 4
            [1] => Tegel lichtgrijs
            [2] => Lichtgrijze tegel 2x2m
            [3] => 40,5
            [4] => 25
        )

)
安塔尔:

Array
(
    [0] => 20
    [1] => 20
    [2] => 27
    [3] => 25
)
我想使用以下代码根据url中的$\u GET值更新每个数量:

$sum = 0;
foreach($_SESSION['producten'] as $key => $product){
    //$_SESSION['producten'][$key][4] = '';
    $number = str_replace(',', '.', $product[3]);
    $sum+= $number;
    if(!empty($_GET['aantal'])){
        foreach($_GET['aantal'] as $keyaantal => $aantal){
            $_SESSION['producten'][$key][4] = $_GET['aantal'][$keyaantal];
        }
    }else{
        $_SESSION['producten'][$key][4] = '1';
    }
}
这是带有html的表单:

<form action="cart.php">
<?php foreach ( $_SESSION['producten'] as $row){

    if(!empty($_GET['aantal'])){
        $aantalwaarde = $row[4];
    }else{
        $aantalwaarde = 1;
    }

    // if($row != ){

    // }
    ?>


        <tr>
            <td><?php echo $row[0] // ID; ?></td>
            <td><?php echo $row[1] // Product_naam; ?></td>
            <td><?php echo $row[2] // Beschrijving; ?></td> 
            <td><input name="aantal[]" type="number" value="<?PHP echo $aantalwaarde; ?>"></td> 
            <td>€<?php echo $row[3] // Prijs; ?></td>   

            <?php $total = $total + intval($row[3]); ?>
        </tr>

        <?php } ?>

        <tr>
            <td></td>
            <td></td>
            <td></td> 
            <td></td>   
        </tr>
        <tr>
            <td><input type="submit" value="Updaten"></td>
            <td></td>
            <td>Totaalprijs</td>
            <td></td> 
            <td>€<?php echo $sum // Prijs; ?></td>   

        </tr>

</form>


你的代码有一个很大的缺陷。首先,遍历整个
producten
数组。在这个数组中,您可以循环通过
aantal
数组并更新值。这真的没有意义,你根本不需要第二个循环。您可以替换整个零件

foreach($_GET['aantal'] as $keyaantal => $aantal){
    $_SESSION['producten'][$key][4] = $_GET['aantal'][$keyaantal];
}
。。。用这个

$_SESSION['producten'][$key][4] = $_GET['aantal'][$key];
这应该能奏效


循环的问题是,您迭代了数组,并在每次迭代中更新了
['producten'][$key][4]
的值。这意味着您遇到的最后一个值始终是最后一个值。

您的代码有一个很大的缺陷。首先,遍历整个
producten
数组。在这个数组中,您可以循环通过
aantal
数组并更新值。这真的没有意义,你根本不需要第二个循环。您可以替换整个零件

foreach($_GET['aantal'] as $keyaantal => $aantal){
    $_SESSION['producten'][$key][4] = $_GET['aantal'][$keyaantal];
}
。。。用这个

$_SESSION['producten'][$key][4] = $_GET['aantal'][$key];
这应该能奏效


循环的问题是,您迭代了数组,并在每次迭代中更新了
['producten'][$key][4]
的值。这意味着您遇到的最后一个值总是最后一个。

您的内部foreach循环就是问题所在。你要检查所有的数量,而不是挑选相关的数量。因此,当循环结束时,您总是将最后一个循环添加到会话中

我现在不能测试,但我认为你应该改变

foreach($_GET['aantal'] as $keyaantal => $aantal){ 
   $_SESSION['producten'][$key][4] = $_GET['aantal'][$keyaantal]; 
} 


这样,您就可以为两个数组选择匹配的键。

您的内部foreach循环就是问题所在。你要检查所有的数量,而不是挑选相关的数量。因此,当循环结束时,您总是将最后一个循环添加到会话中

我现在不能测试,但我认为你应该改变

foreach($_GET['aantal'] as $keyaantal => $aantal){ 
   $_SESSION['producten'][$key][4] = $_GET['aantal'][$keyaantal]; 
} 


这样,您就可以为两个数组选择匹配的键。

如上所述,您忽略了这两个数组都是数组的事实。奇怪的事情可以循环发生。在关键点添加一些调试代码以检查您正在使用的值,这些值通常不是您认为正在使用的值。如前所述,您忽略了这些是数组的事实。奇怪的事情可以循环发生。在关键点添加一些调试代码以检查您正在使用的值,这些值通常不是您认为正在使用的值。