输出到< 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