使用for循环构建一个表 - 如何引用数组中的项

时间:2015-06-18 10:18:42

标签: php mysql arrays

我正在构建一个非常庞大的表,我想减少我执行的查询数量。现在,为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以将值放入的解决方案也适用但是由于需要分配给每个单元类,恕我直言可能很难设置提及银行账户和月/年。

2 个答案:

答案 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>';