PHP使用第一个数组中的值作为第二个数组中的变量

时间:2011-12-03 17:31:26

标签: php multidimensional-array foreach

我正在处理两行表,每行都有基于单独数组的嵌套foreach循环。我希望能够从第一行创建一个值,可用于第二行。查看下面的数据,我希望能够访问值3,1和2,并在第二个数据数组中使用这些值(以确定列宽)。

这是第一行中使用的第一个数据数组:

Array
(
[Nov 18, 2011] => Array
    (
        [C] => 3
        [I] => 1
    )
[Nov 22, 2011] => Array
    (
        [C] => 2
    )
)

这是第二行中使用的第二个数据数组:

Array
(
[Nov 18, 2011] => Array
    (
        [C] => 107705.5792
        [I] => 44561.52
    )
[Nov 22, 2011] => Array
    (
        [C] => -8992.8352
    )
)

以下是两行的当前表结构:

<tr> <!-- ROW 1 -->
<th>f1</th>
<td>f1</td>
<?php foreach($array1 as $a1) { ?>
     <?php foreach ($a1 as $k=>$v) { ?>        
        <td colspan=<?php echo $v ?>>
            <?php echo ($k."_".$v) ?>
        </td>
     <?php } ?>           
<?php } ?>
</tr>
<tr> <!-- ROW 2 -->
<th>f2</th>
<td>f2</td>
<?php foreach($array2 as $a1) { ?>
     <?php foreach ($a1 as $k=>$v) { ?>        
        <td>
            <?php echo ($k."_".$v) ?>
        </td>
     <?php } ?>           
<?php } ?>
</tr>

我认为需要发生的是两个数组需要以某种方式组合。我的数据需要这个结构:

[C] => 107705.5792 - needs to have column width of 3 
[I] => 44561.52 - needs to have column width of 1  
[C] => -8992.8352 - needs to have column width of 2

我希望我已经清楚地解释了这一点。感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:1)

您可以将第一个数组中的每个条目与第二个数组中的条目组合为一个包含两个值的数组:

$combined = $first;
foreach($combined as $date => $vs)
{
    foreach($vs as $k => &$v)
    {
       $v = array($v, $second[$date][$k]);
    }
}
unset($v);

然后你可以像这样访问两个值:

list($a, $b) = $combined['Nov 22, 2011']['C'];
// $a: 2
// $b: -8992.8352

用法:

...
<tr> <!-- ROW 2 -->
<th>f2</th>
<td>f2</td>
<?php foreach($combined as $dates) { ?>
     <?php foreach ($dates as $date=>$v)
           {
               list($colspan, $value) = $v;
     ?>
        <td colspan=<?php echo $colspan; ?>>
            <?php echo ($date."_".$value) ?>
        </td>
     <?php } ?>           
<?php } ?>
</tr>