PHP:来自数组的异常表

时间:2011-11-23 15:46:43

标签: php arrays

假设你有一个像这样的数组:

Array([0] => Array([first_name] => Stack [last_name] => Overflow)
      [1] => Array([first_name] => Andrew [last_name] => Oliveira)
     );

通过以下方式填充表格很容易:

 <th>first name</th>
   <th>last name</th>
<? foreach($info as $key => $data) { ?>
 <tr>
   <td><?= $data['first_name'] ?> </td>
   <td><?= $data['last_name'] ?> </td>
 <tr>
 <? } ?>

上面会产生一个这样的表:

first name || last name
========================
Stack-------|| Overflow
========================
Andrew----|| Oliveira
========================

等等......但是如果给出相同的数组,你会如何做这样的表:

person 0 || person 1
========================
Stack-----|| Andrew
========================
Overflow|| Oliveira
========================

4 个答案:

答案 0 :(得分:1)

这样的东西?

<?php
// create line with "Person X"
echo '<tr>';
$s = sizeof ($info);
for ($i=0;$i<$s;++$i) {
  echo '<td>Person '.$i.'</td>';
}
echo '</tr><tr>';

// create line with first name
foreach ($info as $data) {
  echo '<td>'.$data['first_name'].'</td>';
}
echo '</tr><tr>';

// create line with last name
foreach ($info as $data) {
  echo '<td>'.$data['last_name'].'</td>';
}
echo '</tr>';
?>

答案 1 :(得分:0)

是的,事实上很容易,但使用这种方法:

<?php $COUNT_INFO=count($info); ?>
<th>first name</th>
    <th>last name</th>
    <tr>
        <? for($i=0; $i<$COUNT_INFO; $i++) { ?>
        <td><?= $info[$i]['first_name'] ?> </td>
        <? } ?>
    </tr>
    <tr>
        <? for($i=0; $i<$COUNT_INFO; $i++) { ?>
        <td><?= $info[$i]['last_name'] ?> </td>
        <? } ?>
    <tr>

答案 2 :(得分:0)

制作两个数组,一个用于名字,另一个用于姓氏。之后,使用foreach循环遍历它们并连接表格的第一行和第二行。

foreach($array as $i=>$data){
    $headers .= "<th>Person $i</th>";
    $first_names .= "<td>".$data["first_name"]."</td>";
    $last_names .= "<td>".$data["first_name"]."</td>";
}

echo "<table>
         <tr>$headers</tr>
         <tr>$first_names</tr>
         <tr>$last_names</tr>
      </table>";
你去吧!只需一个循环! :)

答案 3 :(得分:0)

@ Vitor42的答案还可以,但是如果你想要更通用的东西,并且你确信数据总是完整的,请尝试:

<table>
<?php
$info = array(
    array('first_name'=>'Stack','last_name'=>'Overflow'),
    array('first_name'=>'Andrew','last_name'=>'Oliveira')
);
$sHtmlHead = '<tr>';
$arrHtmlBodies = array();
$nSize = sizeOf($info);

for($i=0;$i<$nSize;$i++){
    $sHtmlHead .= '<th>Person '.$i.'</th>';
    $arrTemp = $info[$i];
    $j = 0;
    foreach($arrTemp as $data){
        if(!isset($arrHtmlBodies[$j])) $arrHtmlBodies[$j] = '<tr>';
        $arrHtmlBodies[$j] .= '<td>'.$data.'</td>';
        if($i==($nSize-1)) $arrHtmlBodies[$j] .= '</tr>';
        $j++;
    }
} 
echo $sHtmlHead; ?></tr>
<?php
echo implode('',$arrHtmlBodies); ?></tr>
</table>

如果您不确定数据是否完整,请尝试使用:

<table>
<?php
$info = array(
    array('first_name'=>'Stack','last_name'=>'Overflow'),
    array('first_name'=>'Andrew','last_name'=>'Oliveira'),
    array('first_name'=>'Eli'),
    array('last_name'=>'Astocaza')
);
$sHtmlHead = '<tr>';
$arrHtmlBodies = array();
$nSize = sizeOf($info);
$arrKeys = array_keys($info['0']);
$nSizeKeys = sizeOf($arrKeys);
for($i=0;$i<$nSize;$i++){
    $sHtmlHead .= '<th>Person '.$i.'</th>';
    $arrTemp = $info[$i];
    $j = 0;
    for($j=0;$j<$nSizeKeys;$j++){
        if(!isset($arrHtmlBodies[$j])) $arrHtmlBodies[$j] = '<tr>';
        $arrHtmlBodies[$j] .= '<td>'.$info[$i][$arrKeys[$j]].'</td>';
        if($i==($nSize-1)) $arrHtmlBodies[$j] .= '</tr>';
    }
} 
echo $sHtmlHead; ?></tr>
<?php
echo implode('',$arrHtmlBodies); ?></tr>
</table>