我正在使用PHP RecursiveIteratorIterator
函数生成基于我的DATABASE的动态HTML表格,如下所示:
class TableRows extends RecursiveIteratorIterator {
function __construct($it) {
parent::__construct($it, self::LEAVES_ONLY);
}
function current() {
return "<td>".parent::current()."</td>";
}
function beginChildren() {
echo "<tr>";
}
function endChildren() {
echo "</tr>" . "\n";
}
}
以下foreach
循环生成每个新行并将数据传递给上面的迭代器。
foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) {
echo $v;
}
我执行准备好的$stmt
PDO,其中我从数据库中提取的第一个值始终是行的ID。
这一切都很有效。现在,我遇到的问题是我想在迭代器的name
函数中的每个<td>
元素上生成一个HTML current()
参数。我需要这个name
参数始终是当前RecursiveIteratorIterator循环的第一个key
(在我的例子中,它将是每行的ID列值)。
这样的事情,所以我可以在每个ID
元素中拥有row
的{{1}}:
<td>
修改 整个代码
function current() {
return "<td name='".***FIRST ITERATOR KEY VALUE HERE***."'>".parent::current()."</td>";
}
修改 我想要生成的示例表:
class TableRows extends RecursiveIteratorIterator {
function __construct($it) {
parent::__construct($it, self::LEAVES_ONLY);
}
function current() {
/* Here I need to add the value from the ID column to the <td name="... parameter */
return "<td name='".***FIRST ITERATOR KEY VALUE HERE***."'>".parent::current()."</td>";
}
function beginChildren() {
echo "<tr>";
}
function endChildren() {
echo "</tr>" . "\n";
}
}
try
{
$conn = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT
id,
ddate,
day,
month,
year,
arrival,
departure,
serial_number,
time_mark,
observations
FROM ROUTS WHERE ddate = '".$datecode."'");
$stmt->execute();
// set the resulting array to associative
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) {
echo $v;
}
}
catch(PDOException $e)
{
echo "Error: " . $e->getMessage();
}
$conn = null;
我希望有人可以就此事为我提供一些启示。
答案 0 :(得分:1)
最后,在一位好老朋友的帮助下,我得到了我的问题的答案,我只想分享给可能遇到同样问题的其他人。
提供的解决方案是if
RecursiveIteratorIterator 函数的current()
语句,它检查parent::key
是否是您需要的语句,如果它是PHP将分配parent::current()
的{{1}}值为$this->id
。这样,您可以稍后在return
函数中获取值,如下面的示例代码所示。
function current() {
if(parent::key() == 'id') { /* Check if parent::key is what you are looking for */
$this->id = parent::current(); /* Assign parent::current to $this->id if true */
}
return "<td class='".parent::key()."'>".parent::current()."</td>";
}