我已经在这个话题上搜索了几天,但我没有找到解决方案,所以也许这是不可能的?
目前,我有一个页面可以对姓名和电子邮件信息进行数十次MySQL调用。
<?php echo get_officer_listing("president"); ?>
这些调用函数 get_officer_listing($position)
$sql = "SELECT OfficeTitle, OfficerName, OfficeEmail FROM officers WHERE officeshort = '"$position'"";
$officer = mysql_query($sql);
while($field = mysql_fetch_array($officer)) {
$title = $field["OfficeTitle"];
$name = $field["OfficerName"];
$email = $field["OfficeEmail"];
}
if (empty($name)) {$name = "Vacant";}
if (empty($email)) {$mailto = $name;}
else {$mailto = '<a href="mailto:'.$email.'">'.$name.'</a>';}
echo '<b>'.$title.'</b><br>'.$mailto.'<br>';
}
这适用于返回带有办公室名称和官员名称作为 mailto 链接的单个官员列表。
相反,我想做的是调用 officer 表一次,并将所有相关记录存储在 officerShortName 上索引的多变量关联数组中。然后,在每个官员列表中,我可以回显数组值,例如
<?php
$OfficeShortName = 'president';
echo $array[$OfficeShortName]['position'];
echo $array[$OfficeShortName]['OfficerName'];
echo $array[$OfficeShortName]['OfficeEmail'];
?>
到目前为止,我已经能够将记录拉入一个数组并在 While 循环中打印出所有记录。但是我无法在循环后调用单个记录的值。
我只是不了解数组的工作原理吗?或者有没有办法做到这一点?任何帮助将不胜感激。
你快到了,但你需要跟踪 while() 循环中的数组。
下面是一些示例代码,演示如何打印所有行以及单一类型位置的一行
由于您没有提供架构,我估计您的数据库如下所示
OfficerShort OfficerTitle OfficerName OfficerEmail
------------ ------------- -------------- ----------------
president President Mike mike@nowhere.com
vice-president Vice-President John john@nowhere-else.com
treasurer Treasurer Tyler
member Member Clem clem@foo.com
member Member Blato blato@bar.com
member Member Casper
以下代码重用并基于您开始的内容进行构建。 您确实应该将PDO对象用于数据库连接
$sql = "SELECT OfficerTitle, OfficerName, OfficeEmail FROM officers WHERE officeshort = '"$position'"";
$officerResult = mysql_query($sql);
$allOfficers[$postion] = [];
while($row = mysql_fetch_array($officerResult)) {
$title = $row["OfficerTitle"];
$name = !empty($row["OfficerName"]) ? $row["OfficerName"] : 'Vacant';
$email = $row["OfficerEmail"];
$mailto = !empty($row['OfficerEmail']) ? '<a href="mailto:'.$email.'">'.$name.'</a>' : $name;
$allOfficers[$postion]['OfficerTitle'] = $title;
$allOfficers[$postion]['OfficerName'] = $name;
$allOfficers[$postion]['OfficerEmail'] = $mailto;
}
$allOfficers数组现在将按如下方式填充:
$allOfficers = [
'president' => [
'OfficerTitle' => 'President',
'OfficerName' => 'Mike',
'OfficerEmail' =>
'mike@nowhere.com'
],
'vice-president' => [
'OfficerTitle' => 'Vice-President',
'OfficerName' => 'John',
'OfficerEmail' =>
'john@nowhere-else.com'
],
'treasurer' => [
'OfficerTitle' => 'Treasurer',
'OfficerName' => 'Tyler',
'OfficerEmail' => ''
],
'member' => [
'OfficerTitle' => 'Member',
'OfficerName' => 'Clemo',
'OfficerEmail' => 'clem@foo.com'
],
'member' => [
'OfficerTitle' => 'Member',
'OfficerName' => 'Blato',
'OfficerEmail' => 'blato@bar.com'
],
'member' => [
'OfficerTitle' => 'Member',
'OfficerName' => 'Casper',
'OfficerEmail' => ''
]
];
您可以像这样一次查看所有数据:
foreach ($allOfficers as $postion => $data) {
$title = $data["OfficerTitle"];
$name = !empty($data["OfficerName"]) ? $data["OfficerName"] : 'Vacant';
$email = $data["OfficerEmail"];
$mailto = !empty($email) ? '<a href="mailto:'.$email.'">'.$name.'</a>' : $name;
$mailto = !empty($email) ? '<a href="mailto:'.$email.'">'.$name.'</a>' : $name;
echo "Title = " . $title . " , mail = " . $mailto . "'n";
}
//输出
Title = President , mail = <a href="mailto:mike@nowhere.com">Mike</a>
Title = Vice-President , mail = <a href="mailto:john@nowhere-else.com">John</a>
Title = Treasurer , mail = Tyler
Title = Member , mail = Casper
如果您一次只想看到 1 个位置,您可以通过以下方式做到这一点
var_export($allOfficers['vice-president']);
//输出
array (
'OfficerTitle' => 'Vice-President',
'OfficerName' => 'John',
'OfficerEmail' => 'john@nowhere-else.com',
)