2011-12-03 27 views
1

我正在處理表的兩行,每個表都具有基於單獨數組的嵌套foreach循環。我希望能夠從第一行開始創建一個值,可用於第二行。查看下面的數據,我希望能夠訪問3,1和2的值,並在第二個數據數組中使用這些值(以確定列寬)。PHP使用第一個數組中的值作爲第二個數組中的變量

這是第一個數據陣列,在第1行中使用:

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

這是第二個數據陣列,在第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

您可以從第一陣列中的每個條目與來自第二陣列條目作爲一個數組有兩個值組合:

$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> 
+0

感謝您的答案@hakre,但我仍然不確定我將如何使用re詭異陣營。我不明白這一點:&amp; $ v – DanielAttard

+0

'foreach'中的'&$ v'是數組中值的別名,所以'$ combined'數組在被迭代時可以被改變。對於這個用法我會擴展這個例子,所以它可能會更清晰。 – hakre

+0

再次感謝。在使用示例中,第二個數組來自哪裏?我看不到第二個數組被提及。 – DanielAttard

相關問題