PHP:从阵列
问题描述:
异常表假设你有这样的一个数组:PHP:从阵列
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
========================
答
是的,其实很容易,但用这个方法:
<?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>";
你走了!只需一个循环! :)
答
像这样的事情?
<?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>
此代码片段将输出相同的OP,它有什么帮助? –
啊,我看到你修改的问题,挂在我会refix我的代码 –
基本上我的代码是JercSi的另一个变化,从而用你最喜欢的一个:) –