使用单个PHP数组与多个MySQL调用

时间:2016-02-02 21:46:36

标签: php mysql arrays multidimensional-array

我已经在这个主题上搜索了几天,但我没有找到解决方案,所以也许它不可能?

目前,我有一些页面可以拨打数十个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>';    

}

这适用于将具有Office名称和官员姓名的单个官员列表作为mailto链接返回。

我想要做的是调用一次军官表并将所有相关记录存储在一个以officerShortName索引的多变量关联数组中。然后,在每个军官列表中,我可以回显数组值,如

<?php
$OfficeShortName = 'president';
echo $array[$OfficeShortName]['position'];
echo $array[$OfficeShortName]['OfficerName'];
echo $array[$OfficeShortName]['OfficeEmail'];
?>

到目前为止,我已经能够将记录拉入数组并在While循环中打印出所有记录。但是我还没能在循环之后调用单个记录的值。

我只是不了解数组是如何工作的?或者有办法做到这一点? 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

你几乎就在那里,但你需要跟踪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',
)