生成数组的问题

时间:2014-01-27 01:02:00

标签: php arrays

不知道这里发生了什么,数组应该是这样的:

Array (
    [69] => Array (
        [KR] => 1
    )
    [70] => Array (
        [KR] => 2
    )
    [70] => Array (
        [LR] => 1
    )
    [71] => Array (
       [LR] => 1
    )
)

这是我的代码:

foreach ($_POST as $key => $value) {
    //Split the ID and Product into individual variable
    $tmp = explode("_",$key);
    $id = $tmp[0]; $product = $tmp[1];

    //Generate array's for each sale
    $sales[$id] = array($product => $value);
}
print_r($sales);

以下是它产生的结果:

Array (
    [69] => Array (
        [KR] => 1
    )
    [70] => Array (
        [LR] => 1
    )
    [71] => Array (
        [LR] => 1
    )
)

这是一个快速表,您可以看到实际的变量集合

69_KR   1
70_KR   2
70_LR   1
71_LR   1

3 个答案:

答案 0 :(得分:1)

替换

$sales[$id] = array($product => $value);

$sales[$id][$product] = $value;

答案 1 :(得分:1)

如果多次出现相同的销售ID,则不应将其用作数组密钥。第二次销售ID为70时,它会覆盖第一个的值。

有很多方法可以改变这个,这里有一个建议:

在foreach循环之前,创建空数组$sales = array();(你可能已经这样做了)

如果你不介意一个关联数组(IMO他们使代码更易读/可维护 - 想想别人在5年内改变你的代码并在$ sales数组上做一个var_dump),那么在foreach中尝试这个:

$sales[] = array("sales_id" => $id, "product" => $product, "value" => $value);

稍后您将不得不略微区别地处理数组,但print_r或var_dump确实很容易阅读。 (我还想在输出到浏览器时将print_r包装在<pre>标签中,以获得非常好的数组格式。)

答案 2 :(得分:1)

$sales[$id] = array($product => $value); 

您正在破坏以前版本的$ sales [$ id]。你正在丢失数据。

您需要另一个数据结构来存储返回的值。像一个清单。看起来像

销售=每次销售的清单。 然后访问列表长度的每个销售迭代。