Array_combine来自POST表单的两个以上的数组

时间:2013-07-21 23:25:56

标签: php

我需要帮助组合我使用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 个答案:

答案 0 :(得分:0)

您可以使用array_merge。 有关完整参考和示例,请访问http://www.w3schools.com/php/func_array_merge.asp 告诉我你的问题是否解决了。

答案 1 :(得分: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

DEMO.

答案 2 :(得分: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>";
}

我还建议重构代码以提高可读性。希望这有帮助!

答案 3 :(得分: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'], '...';
}