mysql 命令行 格式化输出_从PHP格式化输出MySQL结果的正确方法是什么?

输出到< table>时如何显示MySQL结果?格式?我觉得我自己的代码可以使用一些编辑.我甚至做得对吗?

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

$items_per_row = 3; // How many

I want to add for every

// 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 ? '

' : '';

$markup .= <<

$col1

$col2

EOD;

$markup .= ($key + 1) % $items_per_row == 0 ? '

' : '';

}

然后我可以< table>

解决方法:

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

// 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, $items_per_row, 1));

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

### RENDERER

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

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

$decorate = function($array, $tags, $f) {

$tag = array_shift($tags);

foreach($array as $element)

echo "",

is_array($element)

? $f($element, $tags, $f)

: htmlspecialchars($element),

"$tag>";

};

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

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

$decorate($allitems, $tags, $decorate);

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

### CONFIGURATION

$items_per_row = 3; // How many

I want to add for every

### 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', 'col2'),

array('col1', 'col2'),

array('col1', 'col2'),

array('col1', 'col2'),

array('col1', 'col2'),

);

ENDIF;

### PROCESS DATA (here obviously for viewing)

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

### RENDERER

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

$decorate = function($array, $tags, $f) {

$tag = array_shift($tags);

foreach($array as $element)

echo "",

is_array($element)

? $f($element, $tags, $f)

: htmlspecialchars($element),

"$tag>";

};

$decorate($allitems, $tags, $decorate);

标签:php,mysql

来源: https://codeday.me/bug/20190626/1292690.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值