我的数组值在嵌套的foreach循环中被覆盖

时间:2013-04-01 15:59:10

标签: php

我有以下代码:

foreach ($model_name as $md) {
    foreach ($years as $y) {
        $model_w_year[$y] = $md;
    } 
}

显然不起作用。它输出的数组看起来像:

Array
(
    [1994] => Maxima
    [1995-1998] => Maxima
)

我希望它看起来像这样:

Array
(
    [1994] => Sentra
    [1995-1998] => Maxima
)

Model_name是上一页的$ _SESSION ['model_name'],years是一个表单数组

echo "<form action='engine.php' method='post'>";
for ($i = 0; $i < count($model_name); $i++) {
   echo "Enter year or year range for: ", $model_name[$i], 
       " <input type='text' name='years[]'></input><br />";
}

以下是我拥有的所有数组结构:

Model make: 
Nissan
model name: 
Array
(
    [0] => Sentra
    [1] => Maxima
)

Number of models:  
2
Number of years: 
Array
(
    [0] => 1994
    [1] => 1995-1998
)

Model with Year: 
Array
(
    [1994] => Maxima
    [1995-1998] => Maxima
)

答案:是的我希望将年份作为关键,将模型作为价值。

2 个答案:

答案 0 :(得分:1)

如果您试图以某种方式从$model_name$years数组中获取某些键值分组,那么您的循环结构似乎没有意义。因为对于每个型号名称,您将遍历每个可用年份并将值设置为当前型号名称。因此,无论您的阵列中的最后一个型号名称如何,最终都将为所有型号年份设置。

根据您的问题,它看起来像模型名称数组,而且数组中的匹配值将具有相同的数字索引。因此,您可以使用类似array_combine()的内容来合并这些值

$merged_array = array_combine($years, $model_name);

这会使用$years作为数组键,使用$model_name作为值。

答案 1 :(得分:1)

Mike Brant的answear解释了为什么你的代码不能按照你想要的方式工作。如果我理解正确,您有两个数组$model_name$years,其中$years[$i]是用户为第i个模型输入的年份。也就是说,数组看起来像这样

Array (
  [???] => Sentra
  [???] => Maxima
)

和这个

Array (
  [0] => 1994
  [1] => 1995-1998
)

在这种情况下,我认为这段代码可以解决问题:

$i = 0;
foreach ($model_name as $md) {
  $model_w_year[$years[$i]] = $md;
  $i++;
}

它不是很漂亮,但我认为它应该有效。