我构建了一个查询,我从中获取了一个关联数组。但是我怎样才能遍历它们。这就是我所拥有的。
我的SQL查询:
public static function album_display() {
global $database;
$sql = "SELECT a.*, ";
$sql .= "(SELECT photographs.filename ";
$sql .= "FROM photographs ";
$sql .= "WHERE photographs.albumid = a.name ";
$sql .= "ORDER BY photographs.creation_date ASC ";
$sql .= "LIMIT 1) ";
$sql .= "AS filename FROM album a ";
$result_set = $database->query($sql);
while($rows = mysqli_fetch_assoc($result_set)){
foreach($rows as $row) {
print_r($row);
}
}
}
如果我在$ row上使用print_r(),则输出为:
15Jaap1Jaap1.JPG16Jaap2Jaap4.JPG17Jaap3Jaap7.JPG18Jaap4Jaap12.JPG19Jaap5
我想循环遍历Jaap1,Jaap2,Jaap3,Jaap 4并将它们放在函数album_path($ albumid,$ filename)中的$ albumid中。我想用JPG文件做同样的事情。此功能在Class()专辑中。函数album_display()也是如此 函数album_path($ albumid,$ filename)如果被调用则需要输出完整的专辑/图像路径,并将这些回显到屏幕上。并显示图像
public function album_path($albumid, $filename) {
return $this->upload_dir.DS.$albumid.DS.$filename;
}
我如何才能使用foreach。或者还有其他更好的方法吗?
亲切的问候, 库斯沃尔夫
答案 0 :(得分:1)
mysqli_fetch_assoc
一次从查询构建的结果集中返回一行。
每个$row
都是一个关联数组,如果你仔细查看var_dump()
的输出,你会看到数组是一组key - value
对。
while($rows = mysqli_fetch_assoc($result_set)){
//echo $row['id'];
//echo $row['filename'];
//echo $row['albumid'];
// just to be sure add this line
// so we know exactly whats in $row
print_r($row);
}
很抱歉,因为您将SELECT *
用于其他字段,我不知道该怎么称呼数组元素。我希望你能得到基本的想法。
答案 1 :(得分:0)
将select a.*
更改为select a.albumid
。这应该只返回来自第二个SELECT
语句的专辑ID和文件名。
答案 2 :(得分:0)
$my_array = [];
public static function album_display() {
global $database;
$sql = "SELECT a.*, ";
$sql .= "(SELECT photographs.filename ";
$sql .= "FROM photographs ";
$sql .= "WHERE photographs.albumid = a.name ";
$sql .= "ORDER BY photographs.creation_date ASC ";
$sql .= "LIMIT 1) ";
$sql .= "AS filename FROM album a ";
$result_set = $database->query($sql);
while($rows = mysqli_fetch_assoc($result_set)){
foreach($rows as $row) {
$my_array['albumid'][] = $row->albumid;
$my_array['filename'][] = $row->filename;
}
}
}
foreach ($my_array['albumid'] as $albumid) {
echo $albumid;
}
foreach ($my_array['filepath'] as $filepath) {
echo $filepath;
}
album_path($my_array['albumid'], $my_array['filepath']);
答案 3 :(得分:0)
也许是这样的?你可以将sql分解为引号内的多行,这样可以更容易阅读,也可以为每个表使用别名,再次使它更容易阅读和更快地编写。
<?php
public static function album_display() {
global $database;
$sql = "SELECT a.*,
( SELECT p.`filename`
FROM `photographs` p
WHERE p`.`albumid` = a.name
ORDER BY p.`creation_date` ASC
LIMIT 1
) AS 'filename' FROM `album` a ";
$result_set = $database->query( $sql );
/* using object notation rather than array for ease */
while( $rows = mysqli_fetch_object( $result_set ) ){
$this->album_path( $rows->albumid, $rows->filename );
}
}
?>