PHP:来自数组的异常表

PHP:来自数组的异常表,php,arrays,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&

假设您有这样一个数组:

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>
 <? } ?>
等等。。。但是,如果给定相同的数组,您将如何处理这样的表:

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

是的,事实上非常简单,但使用以下方法:

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

名字
姓

制作两个数组,一个用于名字,另一个用于姓氏。然后,使用
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>";
foreach($i=>$data的数组){
$headers.=“个人$i”;
$first_name.=''.$data[“first_name]”;
$last_name.=''.$data[“first_name”];
}
回声“
$headers
$first_name
$姓氏
";
好了!只有一个循环!:)

像这样的

<?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>';
?>

关于@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>

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

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


此代码片段将输出与OP相同的内容,它有何帮助?啊,我看到你修改了问题,等一下,我将重新填充代码基本上我的代码是JercSi的另一个变体,所以请使用你最喜欢的代码:)@Dany Khalife one信息:永远不要将count或sizeof放入循环中。因为如果将$count放在循环之外,则循环将执行100%以上的时间。真!我遗漏了这一部分,将对其进行修改:)