Php 如何循环assoc数组值并将数据放入函数中

Php 如何循环assoc数组值并将数据放入函数中,php,mysql,arrays,loops,foreach,Php,Mysql,Arrays,Loops,Foreach,我构建了一个查询,从中获得了一个assoc数组。但我怎样才能循环通过它们呢。这就是我所拥有的 我的SQL查询: public static function album_display() { global $database; $sql = "SELECT a.*, "; $sql .= "(SELECT photographs.filename "; $sql .= "FROM photographs "; $

我构建了一个查询,从中获得了一个assoc数组。但我怎样才能循环通过它们呢。这就是我所拥有的

我的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、JAAP4,并将它们放在函数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进行此操作。或者还有其他更好的方法吗

亲切问候,,
Coos Wolff将
选择a.*
更改为
选择a.albumid
。这应该只返回来自第二条
SELECT
语句的唱片集id和文件名。

可能是这样的吗?您可以将sql拆分为引号内的多行,这样更易于读取,并且还可以为每个表使用别名,这同样使其更易于读取和写入

$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']);
<?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 );
        }
    }
?>

mysqli\u fetch\u assoc
从查询生成的结果集中一次返回一行

每个
$row
都是一个关联数组,如果您更仔细地查看
var\u dump()
的输出,您将看到该数组是一组
键值对

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*
,我不知道如何调用数组元素。我希望您能了解基本的想法。

您能将var_dump的原始输出添加到您的问题中,而无需自己进行任何编辑吗please@RiggsFolly如果我将var_dump($row)放在我的公共静态函数album_display()中而不是echo$row中,原始输出是:string(2)“15”string(5)“Jaap1”string(9)“Jaap1.JPG”string(2)“16”string(5)“Jaap2”string(9)“Jaap4.JPG”string(2)“17”string(5)“Jaap3”string(9)“Jaap7.JPG”string(2)“18”string(5)“Jaap4”string(10)“Jaap12.JPG”现在显示:致命错误:在C:\xampp\htdocs\jaaplangelaar\includes\album.php第86行的对象上下文中不使用$this。所以我改变了$this->album\u路径($rows->albumid,$rows->filename);到相册::相册路径($rows->albumid,$rows->filename);现在它返回:注意:未定义的属性:stdClass::$albumid,位于第86行的C:\xampp\htdocs\jaaplangelaar\includes\album.php中。所以它是循环的,但是$albumid是空的。我理解这个想法。现在,我正在尝试将albumid行和filename行(其中四个)放入我的album_path函数中。我尝试了很多方法,在谷歌上搜索了很多。我就是不能让它工作,真的不清楚你下一步到底想发生什么。就像你说的,你的函数取2个标量参数。添加了一条建议,这次不要编辑打印($row)
的输出,只需将其作为附加信息添加到您的问题编辑问题,不要将其作为注释这会输出我需要的值。但是我如何检索要放入album_path()函数的值(albumid和文件名,存在四次)?它有两个参数$albumid(Jaap1、Jaap2、Jaap3、Jaap4)和$filename(Jaap1.JPG、Jaap4.JPG、Jaap7.JPG、Jaap12.JPG)。感谢所有帮助我解答这些问题的人,我终于让它工作起来了。我真的很感激你的努力!