我正在构建一个非常庞大的表,我想减少我执行的查询数量。现在,为50列表构建5000行需要120秒。 使用此for循环定义列标题:
for($year = $yearMin; $year<=$yearMax; $year++){
for($month = 1; $month <= 12; $month++){
$month = sprintf("%02s", $month);
echo '<th class="report">'.$month.'/'.$year.'</th>';
}
}
每一行都是一个银行帐户。每个细胞都是特定的mont / year对。实际上,我运行一个查询来检查该银行账户中特定月份/年份的金额。仅当余额不为0且查询在50列上发生三次或四次时,查询才返回值。所以我的想法是为行而不是50运行一次查询并提取具有这种结构的数组:
$data['period']='06/2015';
$data['balance']='1000';
重复查询为该行返回的所有余额。
我的问题是:
如何正确迭代$ data数组以将值放入确切的单元格中?我正在考虑这样的事情,但考虑到我将重复这段代码1000行。 编辑:我在这里只提供构建这些特定列而不是整行的代码。所以我知道我错过了<tr>
个标签。
for($year = $yearMin; $year<=$yearMax; $year++){
for($month = 1; $month <= 12; $month++){
$month = sprintf("%02s", $month);
$period = $month.'/'.$year;
echo '<td>';
echo ($period==$data['period']) ? $data['balance'] : '0';
echo '</td>';
}
}
SIDENOTE:我只能在添加银行帐号(标识行)之后构建查询,然后我会做这样的事情(只是代码的想法):
foreach($creds as $cred){
for($year = $yearMin; $year<=$yearMax; $year++){
for($month = 1; $month <= 12; $month++){
if($cred==$data['number'])[
$month = sprintf("%02s", $month);
$period = $month.'/'.$year;
echo '<td>';
echo ($period==$data['period']) ? $data['balance'] : '0';
echo '</td>';
}
}
}
}
另请注意,一个暗示构建一个空表并迭代json编码的php数组$ data以将值放入的解决方案也适用但是由于需要分配给每个单元类,恕我直言可能很难设置提及银行账户和月/年。
答案 0 :(得分:1)
我需要使用此函数在数组中搜索$data['period']
的值。如果找到该值,则函数返回数组中值的位置,我可以读取相关的$data['balance']
值:
function recursive_array_search($needle,$haystack) {
foreach($haystack as $key=>$value) {
$current_key=$key;
if($needle===$value OR (is_array($value) && recursive_array_search($needle,$value) !== false)) {
return $current_key;
}
}
return false;
}
请注意,此函数因数组键0而失败,因此要获得正确的结果,您需要将数组中的第一项作为空值:这样,正确的结果将从键1开始。
答案 1 :(得分:0)
首先需要一个tr - 代表一行然后一个td / th - 代表tr
中的数据$table_header_part = $table_body_part = "";
for($year = $yearMin; $year<=$yearMax; $year++){
for($month = 1; $month <= 12; $month++){
$month = sprintf("%02s", $month);
$table_header_part .='<th class="report">'.$month.'/'.$year.'</th>';
}
}
for($year = $yearMin; $year<=$yearMax; $year++){
for($month = 1; $month <= 12; $month++){
$month = sprintf("%02s", $month);
$period = $month.'/'.$year;
$table_body_part.= '<td>';
$table_body_part.= ($period==$data['period']) ? $data['balance'] : '0';
$table_body_part.= '</td>';
}
}
你桌上的某个地方
echo '<html>
<table>
<tr>
<th>Some Headings</th>
<th>Some Headings</th>
<th>Some Headings</th>
'.
$table_header_part
.'
</tr>
<tr>
<td>Some Data</td>
<td>Some Data</td>
<td>Some Data</td>
'.
$table_body_part
.'
</tr>
</table>
</html>';