从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; ?>< /表> ;. 解决方法
您的代码可以稍微简化,对,但这是正常的.已经有一些提示可以更轻松地从数据库中获取数据:
// 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); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |