1

我需要帮助组合我使用 POST 请求的数组。

表单的 html 和 php:

<form method="POST" action="editservice2.php?id=<?=$id;?>">
<?php
while ($geti = mysql_fetch_assoc($getitems)) {
?>
<input type="hidden" name="itemid[]" value="<?=$geti["id"];?>">
<input type="text" placeholder="Item name" value="<?=$geti["name"];?>" name="itemname[]">
<input type="text" style="width:40px;" placeholder="Item price" value="<?=$geti["price"];?>" name="itemprice[]"><br>
<input type="text" placeholder="Item description" value="<?=$geti["description"];?>" name="itemdesc[]"><br>
<input type="text" placeholder="Item image url" value="<?=$geti["imgurl"];?>" name="itemurl[]"><br>
<input type="text" placeholder="Item command" value="<?=$geti["command"];?>" name="itemcmd[]"><br><br>
<?php
}
?>
<input type="submit" name="submit" value="Configure items">
</form>

和提交后的PHP:

foreach (array_combine($_POST["itemname"], $_POST["itemprice"]) as $itemname => $itemprice) {
    echo "Itemname: ".$itemname."<br>";
    echo "Itemprice: ".$itemprice."<br><br>";
}

但是,上面的代码仅适用于论坛中的 2 个不同的值,我怎样才能使它适用于我得到的所有 6 个表单?

4

4 回答 4

0
$a1 = array('one'=>'TheOne');
$a2 = array('two'=>'TheTwo');
$a34 = array('three'=>'TheThree', 'four'=>'TheFour');
$a = $a1 + $a2 + $a34;

print_r($a);

结果 :

Array
(
    [one] => TheOne
    [two] => TheTwo
    [three] => TheThree
    [four] => TheFour
)

所以,你可以使用

foreach($a1+$a2+$a34 as $key => $value)
{
    echo $key . ' = ' . $value . "<br />";
}

结果 :

one = TheOne
two = TheTwo
three = TheThree
four = TheFour

演示。

于 2013-07-21T23:48:12.540 回答
0

您可以使用 array_merge。如需完整的参考和示例,请访问http://www.w3schools.com/php/func_array_merge.asp 如果您的问题已解决,请告诉我。

于 2013-07-21T23:44:10.290 回答
0

您不应该在循环遍历数组的同时声明您的数组,请尝试将代码更改为:

$item_names = array_combine($_POST["itemname"], $_POST["itemprice"]);
foreach ($item_names as $itemname => $itemprice) {
    echo "Itemname: ".$itemname."<br>";
    echo "Itemprice: ".$itemprice."<br><br>";
}

但是,我会以不同的方式设置此表单。像这样:

<input type="hidden" name="items[<?=$geti["id"];?>][id]" value="<?=$geti["id"];?>">
<input type="text" placeholder="Item name" value="<?=$geti["name"];?>" name="items[<?=$geti["id"];?>][name]">
<input type="text" style="width:40px;" placeholder="Item price" value="<?=$geti["price"];?>" name="items[<?=$geti["id"];?>][price]"><br>
<input type="text" placeholder="Item description" value="<?=$geti["description"];?>" name="items[<?=$geti["id"];?>][desc]"><br>
<input type="text" placeholder="Item image url" value="<?=$geti["imgurl"];?>" name="items[<?=$geti["id"];?>][url]"><br>
<input type="text" placeholder="Item command" value="<?=$geti["command"];?>" name="items[<?=$geti["id"];?>][cmd]"><br><br>

然后在您的处理程序中执行以下操作:

$items = $_POST['items'];

foreach($items as $data){
    echo "Item ID: ".$data['id']."<br>";
    echo "Item Name: ".$data['name']."<br>";
    echo "Item Price: ".$data['price']."<br>";
    echo "Item Desc: ".$data['desc']."<br>";
    echo "Item IMG: ".$data['imgurl']."<br>";
    echo "Item CMD: ".$data['cmd']."<br><br>";
}

我还建议可能重构您的代码以获得更好的可读性。希望这可以帮助!

于 2013-07-21T23:55:34.600 回答
0

这是一种更健壮的方式,因为它不依赖于浏览器将键值对发送到服务器的顺序。此外,如果您引入了诸如复选框之类的可选字段,它将正常工作,浏览器在未“选中”时不会发送名称/值,这将破坏您的索引方案。缩写示例:

<input name="item[0][name]">
<input name="item[0][description]">
<input name="item[0][price]">

<input name="item[1][name]">
<input name="item[1][description]">
<input name="item[1][price]">

<input name="item[2][name]">
<input name="item[2][description]">
<input name="item[2][price]">

然后

foreach ($_POST['items'] as $id => $associated_data) {
    echo $id, $associated_data['name'], $associated_data['price'], '...';
}
于 2013-07-22T00:03:44.077 回答