PHP Arrays,foreach无法访问完整的数组元素

时间:2018-05-05 14:21:48

标签: php

我无法使用foreach循环访问数组元素。

<?php
    echo "<form method=post action=test.php>";
    echo "Item Name: <input type=text name=item[]>";
    echo "Price: <input type=text name=item[]>";
    echo "Quantity: <input type=text name=item[]>";
    echo "<BR>";
    echo "<BR>";
    echo "<input type=submit name=submit>";


    if (isset ($_POST['item']))
    {

        $item = $_POST['item'];

    }

    $item = array (

                   $item_name = $item [0],
                   $price = $item [1],
                   $qty = $item [2],
                   );

    foreach ($item as $item)
    {

        echo $item[0];
        echo $item[1];
        echo $item[2];
    }

?>

2 个答案:

答案 0 :(得分:0)

简单来说,就是根据需要的字段(名称,价格,数量)重命名<input type=text,然后按名称从$ _POST获取数据:

echo "<form method=post action=test.php>";
echo "Item Name: <input type=text name='name'>";
echo "Price: <input type=text name='price'>";
echo "Quantity: <input type=text name='qty'>";
echo "<BR>";
echo "<BR>";
echo "<input type=submit name=submit>";


$name = "";
if (isset ($_POST['name']))
{
    $name = $_POST['name'];
}

$price = "";
if (isset ($_POST['price']))
{
    $price = $_POST['price'];
}

$qty = "";
if (isset ($_POST['qty']))
{
    $qty = $_POST['qty'];
}

如果你想使用更灵活的方法和可能的输入字段列表,那么创建具有可能的字段名称的键数组,并检查foreach循环中每个键的所有存在:

$all_possible_items_keys = ["name","price","qty","author"];
$items = [];
foreach ( $all_possible_items_keys as $key )
{
    if (isset ($_POST[$key]))
    {
        $items[$key] = $_POST[$key];
    }

}

print_r($items);

输出示例:

Array ( [name] => 11 [price] => 11 [qty] => 22 ):

<input type=text添加姓名并将其添加到$all_possible_items_keys,然后$items将保留密钥=&gt;值。

答案 1 :(得分:0)

在循环内部,$item只是数组的一个元素,因此您不应该对其进行索引。 $item[0]是元素的第一个字符。

对于数组和循环中的元素使用相同的变量也很困惑。

像这样写:

foreach ($item as $element) {
    echo $element;
}

但相反,您应该像这样设置HTML:

<form method="post" action="test.php">
Item Name: <input type="text" name="product_name[]">
Price: <input type="text" name="price[]">
Quantity: <input type="text" name="quantity[]">
<br><br>
Item Name: <input type="text" name="product_name[]">
Price: <input type="text" name="price[]">
Quantity: <input type="text" name="quantity[]">
<br><br>
Item Name: <input type="text" name="product_name[]">
Price: <input type="text" name="price[]">
Quantity: <input type="text" name="quantity[]">
<br><br>
Item Name: <input type="text" name="product_name[]">
Price: <input type="text" name="price[]">
Quantity: <input type="text" name="quantity[]">
<br><br>
...
<input type="submit" name="submit">
</form>

然后您的PHP代码可以执行以下操作:

$items = array();
foreach ($_POST['product_name'] as $i => $item_name) {
    $price = $_POST['price'][$i];
    $quantity = $_POST['quantity'][$i];
    if (!empty($item_name) && !empty($price) && !empty($quantity)) {
        // code to insert into database
    }
}