加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

从PHP格式化输出MySQL结果的正确方法是什么?

发布时间:2020-12-13 17:10:18 所属栏目:PHP教程 来源:网络整理
导读:输出到 table时如何显示 MySQL结果?格式?我觉得我自己的代码可以使用一些编辑.我甚至做得对吗? 编辑:我的代码显然是错误的/丑陋的.在仅使用普通PHP而不是Smarty时,最好的方法是什么? $items_per_row = 3; // How many td I want to add for every tr//
输出到< table>时如何显示 MySQL结果?格式?我觉得我自己的代码可以使用一些编辑.我甚至做得对吗?

编辑:我的代码显然是错误的/丑陋的.在仅使用普通PHP而不是Smarty时,最好的方法是什么?

$items_per_row = 3; // How many <td> I want to add for every <tr>

// Query the MySQL db
$sthandler = $dbhandler->prepare("SELECT col1,col2 FROM sampletable");
$sthandler->execute();

// Save each row to array
$allitems = array();
while($row = $sthandler->fetch(PDO::FETCH_ASSOC)){
    $allitems[] = $row;
}

$markup = '';
foreach($allitems as $key=>$val){
    $col1 = $allitems[$key]['col1'];
    $col2 = $allitems[$key]['col2'];

    // START THE MARKUP HERE
    $markup .= $key % $items_per_row == 0 ? '<tr>' : '';
    $markup .= <<<EOD
    <td>
        <p>$col1</p>
        <p>$col2</p>
    </td>
EOD;
    $markup .= ($key + 1) % $items_per_row == 0 ? '</tr>' : '';
}

然后我可以< table><?php echo $markup; ?>< /表&gt ;.

解决方法

您的代码可以稍微简化,对,但这是正常的.已经有一些提示可以更轻松地从数据库中获取数据:

// Query the MySQL db
$sthandler = $dbhandler->prepare("SELECT col1,col2 FROM sampletable");
$sthandler->execute();
$allitems = $sthandler->fetchAll(PDO::FETCH_ASSOC);

然后你想让col1和col2都在它自己的段落中.这已经是每个sql结果行,所以这很好.

然后,您希望输出中每个表行包含三个对. PHP中有一个函数可以为您完成此任务:

array_chunk($allitems,$items_per_row,1);

这将导致您正在寻找的表行.由于这可能是空的但仍然代表一个表,我再次将其包装到另一个数组中:

### PROCESS DATA (here obviously for viewing)

$allitems = array(array_chunk($allitems,1));

所以现在数据的输出结构正确.但是对于这个数据的表示,每个元素需要在它周围获得一个HTML标记 – 递归.从外部到内部,标签是:

### RENDERER
$tags = array('table','tr','td','p');

剩下的是在每个成员周围添加这些标签的装饰功能:

$decorate = function($array,$tags,$f) {
    $tag = array_shift($tags);
    foreach($array as $element)
        echo "<$tag>",is_array($element)
                ? $f($element,$f)
                : htmlspecialchars($element),"</$tag>";
};

它将递归地将标记包装到数组的适当级别,这意味着如果内部有更多项,则函数调用另一个函数(请参阅is_array测试).

现在一切都准备好了,数组得到了标签,数组的内部元素将使用相同的函数,所以它也作为参数传递:

$decorate($allitems,$decorate);

完成. Demo.示例代码一览:

<?php

### CONFIGURATION

$items_per_row = 3; // How many <td> I want to add for every <tr>

### GET DATA FROM STORE

IF (0):
// Query the MySQL db
$sthandler = $dbhandler->prepare("SELECT col1,col2 FROM sampletable");
$sthandler->execute();
$allitems = $sthandler->fetchAll(PDO::FETCH_ASSOC);
ELSE:
// Static test data
$allitems = array(
    array('col1','col2'),array('col1',);
ENDIF;

### PROCESS DATA (here obviously for viewing)

$allitems = array(array_chunk($allitems,1));

### RENDERER
$tags = array('table','p');
$decorate = function($array,"</$tag>";
};
$decorate($allitems,$decorate);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读