0

任何人都可以用下面的方法指出我正确的方向吗

我在 FROM 中有这个 HTML(在这个例子中被简化了):

=============== 开始 HTML ===================

<select name="Postage[]" id="Unique-ID">
    <option value="1">Postage Option 1</option>
    <option value="2">Postage Option 2</option>
    <option value="3">Postage Option 3</option>
</select>
<input name="PostagePrice[]" id="Price-Unique-ID" value="" />

<select name="Postage[]" id="Unique-ID">
    <option value="1">Postage Option 1</option>
    <option value="2">Postage Option 2</option>
    <option value="3">Postage Option 3</option>
</select>
<input name="PostagePrice[]" id="Price-Unique-ID" value="" />

<select name="Postage[]" id="Unique-ID">
    <option value="1">Postage Option 1</option>
    <option value="2">Postage Option 2</option>
    <option value="3">Postage Option 3</option>
</select>
<input name="PostagePrice[]" id="Price-Unique-ID" value="" />

================== 结束 HTML =====================

我从表单中收集它并使用以下代码将其设置为数组($arrPostageOptions):

=============== 开始 PHP ===================

if (isset($_POST['Postage'])) {
    if (is_array($_POST['Postage'])) {
        $n = count($_POST['Postage']);
        for ($i = 0; $i < $n; ++$i) {
            // check to only collect completed entries
            if( !empty($_POST['Postage'][$i]) && !empty($_POST['PostagePrice'][$i]) ){
                // assign to array
                $arrPostageOptions[$i] = array( "Postage" => $_POST['Postage'][$i], "PostagePrice" => $_POST['PostagePrice'][$i], );
            }
        }
    }
}  

=============== 结束 PHP ===================

这导致以下数组

============ 数组结果 ================

Array(
    [0] => Array
        (
            [Postage] => 1
            [PostagePrice] => 12
        )
    [1] => Array
        (
            [Postage] => 2
            [PostagePrice] => 24
        )
    [2] => Array
        (
            [Postage] => 3
            [PostagePrice] => 48
        )
)

============ 结束数组结果 ===============

我想要的答案(我认为)对于每个数组是:

1 & 12

2 & 24

3 & 48

(数组号码与邮资号码匹配只是巧合,我只想要'Postage'和'PostagePrice')

我正在尝试以下操作:

=========== 我正在尝试的开始 ==========

foreach ($arrPostageOptions as $id) {
    while ($id) {
        $Postage = $id["Postage"];
        $PostagePrice = $id["PostagePrice"];
        // echo $Postage.' '.$PostagePrice.'<br>';
        unset($id);
        if (!$listing_obj->addPostageOptions($ListingID, $PostageOptionID, $PostagePrice, $db)) {
           $err_text .= 'An error occurred adding Postage Option'.$PostageOptionID;
        }
    }   
}

======我正在尝试的结束===============

不幸的是,这并没有像我预期的那样工作(但这是我得到的最接近的)。我也尝试了多个 foreach 循环,但我还是没有得到我之后的内容(不稳定的 $id 会阻止循环永远继续,但也会给我未定义变量 $id 的 PHP 通知)

我确定我知道如何做到这一点,但似乎已经忘记并且可能过于复杂,因为这些数组仍然让我感到困惑。

非常欢迎任何建议!

4

4 回答 4

1

我不完全确定我理解你想要做什么,但在我看来你想像这样迭代数组,但我不确定。

foreach ($arrPostageOptions as $id=>$array) {
  foreach($array as $key=>$val){
    // do your stuff here using where you can also reference $id
  }
}
于 2013-07-20T18:26:56.443 回答
1

有几件事我想说的是,isset 函数在这里有点毫无意义,最好与提交按钮一起使用,而不是用于文本字段和其他输入。

此外,您正在循环内声明您的数组,因此在外部任何地方访问它都会产生未定义的错误。

我只是使用了您的表单并稍微更新了 php 脚本以提供您想要的输出。请看一看。

你的表格

<form action="yourscript.php" method="POST">

    <select name="Postage[]" id="Unique-ID">
    <option value="1">Postage Option 1</option>
    <option value="2">Postage Option 2</option>
    <option value="3">Postage Option 3</option>
    </select>
    <input name="PostagePrice[]" id="Price-Unique-ID" value="" />

    <select name="Postage[]" id="Unique-ID">
        <option value="1">Postage Option 1</option>
        <option value="2">Postage Option 2</option>
        <option value="3">Postage Option 3</option>
    </select>
    <input name="PostagePrice[]" id="Price-Unique-ID" value="" />

    <select name="Postage[]" id="Unique-ID">
        <option value="1">Postage Option 1</option>
        <option value="2">Postage Option 2</option>
        <option value="3">Postage Option 3</option>
    </select>
    <input name="PostagePrice[]" id="Price-Unique-ID" value="" />

    <input type="submit" value="submit" name="submit"/>

    </form>

我在标题中添加了一个提交按钮和一个方法和操作,只是为了让它更清楚一点。

这是我使用的脚本,与您的非常相似

<?php

    $arrPostageOptions = array();

    if(isset($_POST['submit']))
    {
        $postage = $_POST['Postage'];
        $postagePrice = $_POST['PostagePrice'];

        $array_size = count($postage);

        for($i = 0; $i < $array_size; $i++)
        {
            if(!empty($postage[$i]) && !empty($postagePrice[$i]))
            {
                $arrPostageOptions[$i] = array("Postage"=>$postage[$i], 
                            "PostagePrice"=>$postagePrice[$i]);  
            }
        }
        print_r($arrPostageOptions);
    }

?>

我检查是否设置/单击了提交按钮并进入循环。我在外面定义了数组变量,所以它可以在程序的任何地方使用。

如果您看到 print_r 结果,您将看到所需格式的数组。

我希望我回答了你的几个问题。

同时,在使用 POST 数据之前,最好始终将它们放入变量中,这样您就可以比直接使用 $_POST['name'] 更好地检查和控制它们。当您使用数据库和其他相关事物时,这将更加有用。

希望这可以帮助。

谢谢,肖恩。

于 2013-07-20T18:58:14.687 回答
1

为什么不简单:

foreach ($arrPostageOptions as $postageOption) {
    $postage = $postageOption["Postage"];
    $postagePrice = $postageOption["PostagePrice"];
    echo $postage.' '.$postagePrice.'<br>';
    ...
}

很抱歉重命名,但 $id 对我来说太混乱了。

于 2013-07-20T18:34:09.043 回答
0

whileforeach多余的。foreach只要有一个新的条目$id无论如何都会继续。

如果删除while,循环应该没问题。如果要测试数据是否有效,请通过将其放入循环中来测试数组键本身

if(!$id["Postage"] || !$id["PostagePrice"]){
  continue;  
  }
于 2013-07-20T18:28:57.650 回答