遍历多维数组

3

我正在使用php和dropbox api开发一个应用程序,尝试循环遍历多维数组并输出到表格中。以下是我的代码:

<?php
session_start();

# Include the Dropbox SDK libraries
require_once "Dropbox/autoload.php";
use \Dropbox as dbx;

// Create connection
$con = mysqli_connect(
    "localhost", "sintegra_aggre", "*******", "sintegra_aggregator"
);

// Check connection
if (mysqli_connect_errno($con)) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

if (isset($_SESSION['uid'])) {
    $password = $_SESSION['pass'];
    $username = $_SESSION['user'];
    $email = mysqli_query($con, "
        SELECT * 
        FROM main_users
        WHERE
            password='$password'
            AND username='$username'
    ");

    if ($email >= 1) {
        // let them stay on page
    } else {
        header("Location: logout.php");
    }
} else {
    header("Location: login.php");
}

$accessToken = $_SESSION['accessToken'];

$dbxClient = new dbx\Client($accessToken, "PHP-Example/1.0");

$folderMetadata = $dbxClient->getMetadataWithChildren("/upload");

foreach ($folderMetadata as $value) {
    echo $value;
    foreach ($value as $val) {
        echo $val . "<br />";
    }
    echo "<br /><br />";
}
?>

以下是数组的print_r输出结果:

Array
(
    [hash] => d023a1738d460f667d383cb4f57bc769
    [revision] => 65
    [rev] => 411389e826
    [thumb_exists] => 
    [bytes] => 0
    [modified] => Wed, 28 Aug 2013 20:28:34 +0000
    [path] => /upload
    [is_dir] => 1
    [icon] => folder
    [root] => app_folder
    [contents] => Array
        (
            [0] => Array
                 (
                    [revision] => 81
                    [rev] => 511389e826
                    [thumb_exists] => 1
                    [bytes] => 1996564
                    [modified] => Wed, 28 Aug 2013 21:32:10 +0000
                    [client_mtime] => Wed, 28 Aug 2013 21:32:11 +0000
                    [path] => /upload/08-nigellas-chocolate-chip-muffins.jpg
                    [is_dir] => 
                    [icon] => page_white_picture
                    [root] => dropbox
                    [mime_type] => image/jpeg
                    [size] => 1.9 MB
                )

            [1] => Array
                (  
                    [revision] => 79
                    [rev] => 4f1389e826
                    [thumb_exists] => 1
                    [bytes] => 22848
                    [modified] => Wed, 28 Aug 2013 21:14:39 +0000
                    [client_mtime] => Wed, 28 Aug 2013 21:14:39 +0000
                    [path] => /upload/1376243030_guestion.png
                    [is_dir] => 
                    [icon] => page_white_picture
                    [root] => dropbox
                    [mime_type] => image/png
                    [size] => 22.3 KB
                )

            [2] => Array
                (
                    [revision] => 80
                    [rev] => 501389e826
                    [thumb_exists] => 
                    [bytes] => 54772
                    [modified] => Wed, 28 Aug 2013 21:26:19 +0000
                    [client_mtime] => Wed, 28 Aug 2013 21:26:19 +0000
                    [path] => /upload/BT_screen_quiz.java
                    [is_dir] => 
                    [icon] => page_white_cup
                    [root] => dropbox
                    [mime_type] => text/x-java
                    [size] => 53.5 KB
                )

           [3] => Array
               (
                    [revision] => 77
                    [rev] => 4d1389e826
                    [thumb_exists] => 
                    [bytes] => 1679
                    [modified] => Wed, 28 Aug 2013 20:59:53 +0000
                    [client_mtime] => Wed, 28 Aug 2013 20:59:53 +0000
                    [path] => /upload/login.php
                    [is_dir] => 
                    [icon] => page_white_php
                    [root] => dropbox
                    [mime_type] => text/php
                    [size] => 1.6 KB
                )

            [4] => Array
                (    
                    [revision] => 78
                    [rev] => 4e1389e826
                    [thumb_exists] => 
                    [bytes] => 2037
                    [modified] => Wed, 28 Aug 2013 21:00:56 +0000
                    [client_mtime] => Wed, 28 Aug 2013 21:00:56 +0000
                    [path] => /upload/signup.php
                    [is_dir] => 
                    [icon] => page_white_php
                    [root] => dropbox
                    [mime_type] => text/php
                    [size] => 2 KB
                )

        )

    [size] => 0 bytes
)

我尝试了不同的方法,如以下帖子中所述: 但是它们都没有起作用。
我希望有人能提供一些代码,循环遍历该数组并将其输出到表格中。只需要将内容数组放入表格中。
谢谢,Marcus

你希望你的表格如何布局?一个用于文件夹信息的表格,另一个跟随其后用于内容信息? - Jason
嗨,我在考虑左列可以有每个文件的标题,例如字节、路径等,右侧则为对应的值。 - marcus
同时,我刚刚意识到我忘了提到我不需要文件夹信息(现在我已经编辑了原始帖子)。 - marcus
1个回答

1

一些内联和块状的 PHP 就可以完成基本操作。其余的格式取决于您自己的选择 ;D

为了提高速度,所有的 foreach 循环都是使用引用值完成的。

修订后的答案

根据新的信息,由于您希望在顶部放置标题,您可以尝试像这样的方法:

<?php $headings = array_keys($array['contents'][0]); ?>

<table>
    <tr>
        <?php foreach( $headings as &$heading ): ?>
            <th><?php echo $heading; ?></th>
        <?php endforeach; ?>
    </tr>
    <?php foreach( $array['contents'] as &$file ): ?>
        <tr>
            <?php foreach( $file as &$data ): ?>
                <td><?php echo $data; ?></td>
            <?php endforeach; ?>
        </tr>
    <?php endforeach; ?>
</table>

首先获取数组的键名作为表头,输出表头行,然后通过引用直接遍历数组中的数据行。

之前的版本

这是我的上一个答案,它在左侧显示带有标题的表格,并在列中显示数据。

<?php
    $output = array();

    foreach( $test['contents'] as &$file )
    {
        foreach( $file as $heading => &$value )
        {
            $output[$heading][] = $value;
        }
    }
?>

<table>
    <?php foreach( $output as $heading => &$data): ?>
        <tr>
            <th><?php echo $heading; ?></th>
           <?php foreach( $data as &$value ): ?>
               <td><?php echo $value; ?></td>
           <?php endforeach; ?>
        </tr>
    <?php endforeach; ?>
</table>

由于表格的布局方式,只需稍微调整一下就可以使数组正确迭代。虽然有可能有许多不同的编写方法。

你好,感谢您的帮助,目前一切都运作得很完美。这是我的错,我试图让文件名位于左侧,表头位于顶部,我觉得这意味着代码必须从从左到右改为从上到下。如果可能的话,请编辑您的回答,因为我不知道如何开始做这件事。 - marcus
请检查更新后的答案,这将在顶部显示带标题的表格。 - Jason

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接