如何循环关联数组值并将数据放入函数中

时间:2016-01-13 23:30:14

标签: php mysql arrays loops foreach

我构建了一个查询,我从中获取了一个关联数组。但是我怎样才能遍历它们。这就是我所拥有的。

我的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。或者还有其他更好的方法吗?

亲切的问候, 库斯沃尔夫

4 个答案:

答案 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 );
        }
    }
?>