PHP использует значение из первого массива в качестве переменной во втором массиве - PullRequest
1 голос
/ 03 декабря 2011

Я имею дело с двумя строками таблицы, каждая из которых имеет вложенные циклы foreach, основанные на отдельных массивах.Я хочу иметь возможность сделать значение из первого ряда доступным для второго ряда.Глядя на данные ниже, я хочу иметь возможность доступа к значениям 3, 1 и 2 и использовать эти значения (для определения ширины столбцов) во втором массиве данных.

Это первый массив данных, используемый в строке 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 Ответ

1 голос
/ 03 декабря 2011

Вы можете объединить каждую запись из первого массива вместе с записью из второго массива в виде массива с двумя значениями:

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

Затем вы можете получить доступ к обоим значениям, например так:*

Использование:

...
<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>
...