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];
}
到
这样,您就可以为两个数组选择匹配的键。如上所述,您忽略了这两个数组都是数组的事实。奇怪的事情可以循环发生。在关键点添加一些调试代码以检查您正在使用的值,这些值通常不是您认为正在使用的值。如前所述,您忽略了这些是数组的事实。奇怪的事情可以循环发生。在关键点添加一些调试代码以检查您正在使用的值,这些值通常不是您认为正在使用的值。