如何在foreach构造PHP中存储和重用每个打印元素的值
我目前正在用php编写一个基于文本的游戏,我刚刚遇到了一个我真的很想解决的复杂问题。我试图寻找解决办法,但没有成功。这是我的问题: 我使用foreach打印出数组中元素值大于0的所有项目(我不想显示用户有0个项目) 但我不知道如何使每个数字输入窗口和提交按钮打印唯一(一起),以便当玩家点击“出售”时,其出售正确的项目和正确的数量!现在看来我只能获得玩家想要出售的最后一种元素的数量 所以我的问题是:如何在foreach构造中存储和重用每个打印元素的值? 见下表:如何在foreach构造PHP中存储和重用每个打印元素的值,php,arrays,foreach,Php,Arrays,Foreach,我目前正在用php编写一个基于文本的游戏,我刚刚遇到了一个我真的很想解决的复杂问题。我试图寻找解决办法,但没有成功。这是我的问题: 我使用foreach打印出数组中元素值大于0的所有项目(我不想显示用户有0个项目) 但我不知道如何使每个数字输入窗口和提交按钮打印唯一(一起),以便当玩家点击“出售”时,其出售正确的项目和正确的数量!现在看来我只能获得玩家想要出售的最后一种元素的数量 所以我的问题是:如何在foreach构造中存储和重用每个打印元素的值? 见下表: if (loggedIn()) {
if (loggedIn()) { ?>
<h3><center>Your items</center></h3><hr><br />
<div class=tools>
<table class="inventory">
<?php
foreach (array_slice($items, 2) as $key => $value) {
if($value>0){
echo "<tr><form action='store.php' method='GET'>
<td>".$key."</td>
<td>".$value."</td>
<td>st</td>
<td><input type='number' name='".$key."' value='0'></td>
<td><input type='submit' value='sell'></td>
</form></tr>";
}
}
if(isset($_GET['Sell'])){
echo $_GET[$key];
// Here i want to decrease the value of given $key
}
?>
</table>
</div>
<?php
}else {
header('Location: index.php');
}
if(loggedIn()){?>
您的物品
一种方法是在表格周围放置一个表单,并使用button元素指示正在销售的商品。将提交所有文本输入,但只提交单击的按钮,因此您可以使用该按钮的值来获得正确的文本输入。如下所示:
<form action='store.php' method='GET'>
<table class="inventory">
<?php
foreach (array_slice($items, 2) as $key => $value) {
if ($value > 0) {
echo "<tr>
<td>$key</td>
<td>$value</td>
<td>st</td>
<td><input type='number' name='items[$key]' value='0'></td>
<td><button type='submit' name='item' value='$key'>sell</button></td>
</tr>";
}
}
?>
</table>
</form>
然后用它来得到数量
$number_sold = $_GET['items'][$item_sold];
为此,我建议使用POST而不是GET,因为我假设它会在您的服务器上进行更改。为什么要为每个表单都构建表单?在循环外部构建表单,只在其中显示表元素,然后在提交时让它确定哪个元素是clicked@clearshot66谢谢你的快速回复!我已经让它工作了在使用switch语句之前,在语句外部有表单的开始和结束标记,但我想缩减代码,现在当我在foreach构造外部有表单时,我得到了这个$u get URL:store.php?Såg=0&Skruvdragare=0&Sandpapper=0&fogmasa=0&Lim=0&Arbetsskor=0&Sell=Sälj&isoling=0&Markduk=0&Våtrumsgips=0
$number_sold = $_GET['items'][$item_sold];