在 PHP 中重复第一个键值 RecursiveIteratorIterator
Repeat first key value in PHP RecursiveIteratorIterator
我正在使用 PHP RecursiveIteratorIterator
函数基于我的数据库生成动态 HTML table,如下所示:
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;
}
我执行准备好的 PDO $stmt
,其中我从数据库中提取的第一个值始终是行的 ID。
这一切都很好用。现在,我遇到的问题是我想在迭代器的 current()
函数中的每个 <td>
元素上生成一个 HTML name
参数。我需要这个 name
参数始终是当前 RecursiveIteratorIterator 循环的第一个 key
(在我的例子中是每行的 ID 列值)。
像这样,所以我可以在每个 <td>
元素中包含 row
的 ID
:
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;
编辑:
我想生成的示例 table:
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="table-styles.css">
<title>Register</title>
</head>
<body>
<form method='post' onsubmit="return confirm('Are you sure you want to submit?');">
<table id='table-left'>
<caption>11/22/33</caption>
<caption>ROUTS</caption>
<tr>
<th>ID</th>
<th>Date</th>
<th>Day</th>
<th>Month</th>
<th>Year</th>
<th>Arrival</th>
<th>Departure</th>
<th>S/N</th>
<th>Time Mark</th>
<th>Observation</th>
</tr>
<tr>
<td name="id-1">1</td> <!-- The value of this <td> tag needs to populate in the name of each next <td> 'name' parameter for this row!-->
<td name="ddate-1">03062016</td> <!-- Here I want to add this number "1" to the name of the <td> element.-->
<td name="day-1">Day</td> <!-- Here I want to add this number "1" to the name of the <td> element.-->
<td name="month-1">Month</td> <!-- Here I want to add this number "1" to the name of the <td> element.-->
<td name="year-1">Year</td> <!-- Here I want to add this number "1" to the name of the <td> element.-->
<td name="arrival-1">Arrival</td> <!-- Here I want to add this number "1" to the name of the <td> element.-->
<td name="departure-1">Departure</td> <!-- Here I want to add this number "1" to the name of the <td> element.-->
<td name="sn-1">S/N</td> <!-- Here I want to add this number "1" to the name of the <td> element.-->
<td name="time-mark-1">Time Mark</td> <!-- Here I want to add this number "1" to the name of the <td> element.-->
<td name="observation-1">Observation</td> <!-- Here I want to add this number "1" to the name of the <td> element.-->
</tr>
<tr>
<td name="id-2">2</td> <!-- The value of this <td> tag needs to populate in the name of each next <td> 'name' parameter for this row!-->
<td name="ddate-2">03062016</td> <!-- Here I want to add this number "2" to the name of the <td> element.-->
<td name="day-2">Day</td> <!-- Here I want to add this number "2" to the name of the <td> element.-->
<td name="month-2">Month</td> <!-- Here I want to add this number "2" to the name of the <td> element.-->
<td name="year-2">Year</td> <!-- Here I want to add this number "2" to the name of the <td> element.-->
<td name="arrival-2">Arrival</td> <!-- Here I want to add this number "2" to the name of the <td> element.-->
<td name="departure-2">Departure</td> <!-- Here I want to add this number "2" to the name of the <td> element.-->
<td name="sn-2">S/N</td> <!-- Here I want to add this number "2" to the name of the <td> element.-->
<td name="time-mark-2">Time Mark</td> <!-- Here I want to add this number "2" to the name of the <td> element.-->
<td name="observation-2">Observation</td> <!-- Here I want to add this number "2" to the name of the <td> element.-->
</tr>
<tr>
<td name="id-3">3</td> <!-- The value of this <td> tag needs to populate in the name of each next <td> 'name' parameter for this row!-->
<td name="ddate-3">03062016</td> <!-- Here I want to add this number "3" to the name of the <td> element.-->
<td name="day-3">Day</td> <!-- Here I want to add this number "3" to the name of the <td> element.-->
<td name="month-3">Month</td> <!-- Here I want to add this number "3" to the name of the <td> element.-->
<td name="year-3">Year</td> <!-- Here I want to add this number "3" to the name of the <td> element.-->
<td name="arrival-3">Arrival</td> <!-- Here I want to add this number "3" to the name of the <td> element.-->
<td name="departure-3">Departure</td> <!-- Here I want to add this number "3" to the name of the <td> element.-->
<td name="sn-3">S/N</td> <!-- Here I want to add this number "3" to the name of the <td> element.-->
<td name="time-mark-3">Time Mark</td> <!-- Here I want to add this number "3" to the name of the <td> element.-->
<td name="observation-3">Observation</td> <!-- Here I want to add this number "3" to the name of the <td> element.-->
</tr>
<tr>
<td><input class='hdl' type='text' name='id' value=''></input></td>
<td><input class='hdl' type='text' name='date' value=''></input></td>
<td><input class='hds' type='text' name='day' value=''></input></td>
<td><input class='rm' type='text' name='month' value=''></input></td>
<td><input class='hm' type='text' name='year' value=''></input></td>
<td><input class='ob' type='text' name='arr' value=''></input></td>
<td><input class='pre' type='text' name='dep' value=''></input></td>
<td><input class='prs' type='text' name='sn' value=''></input></td>
<td><input class='vol' type='text' name='tm' value=''></input></td>
<td><input class='obs' type='text' name='ob' value=''></input></td>
</tr>
</table>
<input id='submit' type='submit' name='submit' value='Submit' />
</form>
</body>
</html>
我希望有人能为我阐明这件事。
终于,在一位老朋友的帮助下,我得到了我的问题的答案,我只是想分享给可能遇到同样问题的其他人。
提供的解决方案是 current()
RecursiveIteratorIterator 函数中的 if
语句,它检查 parent::key
是否是您需要的,如果是PHP 会将 parent::current()
值分配给 $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>";
}
我正在使用 PHP RecursiveIteratorIterator
函数基于我的数据库生成动态 HTML table,如下所示:
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;
}
我执行准备好的 PDO $stmt
,其中我从数据库中提取的第一个值始终是行的 ID。
这一切都很好用。现在,我遇到的问题是我想在迭代器的 current()
函数中的每个 <td>
元素上生成一个 HTML name
参数。我需要这个 name
参数始终是当前 RecursiveIteratorIterator 循环的第一个 key
(在我的例子中是每行的 ID 列值)。
像这样,所以我可以在每个 <td>
元素中包含 row
的 ID
:
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;
编辑: 我想生成的示例 table:
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="table-styles.css">
<title>Register</title>
</head>
<body>
<form method='post' onsubmit="return confirm('Are you sure you want to submit?');">
<table id='table-left'>
<caption>11/22/33</caption>
<caption>ROUTS</caption>
<tr>
<th>ID</th>
<th>Date</th>
<th>Day</th>
<th>Month</th>
<th>Year</th>
<th>Arrival</th>
<th>Departure</th>
<th>S/N</th>
<th>Time Mark</th>
<th>Observation</th>
</tr>
<tr>
<td name="id-1">1</td> <!-- The value of this <td> tag needs to populate in the name of each next <td> 'name' parameter for this row!-->
<td name="ddate-1">03062016</td> <!-- Here I want to add this number "1" to the name of the <td> element.-->
<td name="day-1">Day</td> <!-- Here I want to add this number "1" to the name of the <td> element.-->
<td name="month-1">Month</td> <!-- Here I want to add this number "1" to the name of the <td> element.-->
<td name="year-1">Year</td> <!-- Here I want to add this number "1" to the name of the <td> element.-->
<td name="arrival-1">Arrival</td> <!-- Here I want to add this number "1" to the name of the <td> element.-->
<td name="departure-1">Departure</td> <!-- Here I want to add this number "1" to the name of the <td> element.-->
<td name="sn-1">S/N</td> <!-- Here I want to add this number "1" to the name of the <td> element.-->
<td name="time-mark-1">Time Mark</td> <!-- Here I want to add this number "1" to the name of the <td> element.-->
<td name="observation-1">Observation</td> <!-- Here I want to add this number "1" to the name of the <td> element.-->
</tr>
<tr>
<td name="id-2">2</td> <!-- The value of this <td> tag needs to populate in the name of each next <td> 'name' parameter for this row!-->
<td name="ddate-2">03062016</td> <!-- Here I want to add this number "2" to the name of the <td> element.-->
<td name="day-2">Day</td> <!-- Here I want to add this number "2" to the name of the <td> element.-->
<td name="month-2">Month</td> <!-- Here I want to add this number "2" to the name of the <td> element.-->
<td name="year-2">Year</td> <!-- Here I want to add this number "2" to the name of the <td> element.-->
<td name="arrival-2">Arrival</td> <!-- Here I want to add this number "2" to the name of the <td> element.-->
<td name="departure-2">Departure</td> <!-- Here I want to add this number "2" to the name of the <td> element.-->
<td name="sn-2">S/N</td> <!-- Here I want to add this number "2" to the name of the <td> element.-->
<td name="time-mark-2">Time Mark</td> <!-- Here I want to add this number "2" to the name of the <td> element.-->
<td name="observation-2">Observation</td> <!-- Here I want to add this number "2" to the name of the <td> element.-->
</tr>
<tr>
<td name="id-3">3</td> <!-- The value of this <td> tag needs to populate in the name of each next <td> 'name' parameter for this row!-->
<td name="ddate-3">03062016</td> <!-- Here I want to add this number "3" to the name of the <td> element.-->
<td name="day-3">Day</td> <!-- Here I want to add this number "3" to the name of the <td> element.-->
<td name="month-3">Month</td> <!-- Here I want to add this number "3" to the name of the <td> element.-->
<td name="year-3">Year</td> <!-- Here I want to add this number "3" to the name of the <td> element.-->
<td name="arrival-3">Arrival</td> <!-- Here I want to add this number "3" to the name of the <td> element.-->
<td name="departure-3">Departure</td> <!-- Here I want to add this number "3" to the name of the <td> element.-->
<td name="sn-3">S/N</td> <!-- Here I want to add this number "3" to the name of the <td> element.-->
<td name="time-mark-3">Time Mark</td> <!-- Here I want to add this number "3" to the name of the <td> element.-->
<td name="observation-3">Observation</td> <!-- Here I want to add this number "3" to the name of the <td> element.-->
</tr>
<tr>
<td><input class='hdl' type='text' name='id' value=''></input></td>
<td><input class='hdl' type='text' name='date' value=''></input></td>
<td><input class='hds' type='text' name='day' value=''></input></td>
<td><input class='rm' type='text' name='month' value=''></input></td>
<td><input class='hm' type='text' name='year' value=''></input></td>
<td><input class='ob' type='text' name='arr' value=''></input></td>
<td><input class='pre' type='text' name='dep' value=''></input></td>
<td><input class='prs' type='text' name='sn' value=''></input></td>
<td><input class='vol' type='text' name='tm' value=''></input></td>
<td><input class='obs' type='text' name='ob' value=''></input></td>
</tr>
</table>
<input id='submit' type='submit' name='submit' value='Submit' />
</form>
</body>
</html>
我希望有人能为我阐明这件事。
终于,在一位老朋友的帮助下,我得到了我的问题的答案,我只是想分享给可能遇到同样问题的其他人。
提供的解决方案是 current()
RecursiveIteratorIterator 函数中的 if
语句,它检查 parent::key
是否是您需要的,如果是PHP 会将 parent::current()
值分配给 $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>";
}