1

我正在制作一个 Dropbox 文件浏览器来练习使用 API 并遇到了问题。这是我的代码:

<?php
    $fileMetadata = $dbxClient->getMetadataWithChildren("/upload");
    $headings = array_keys($fileMetadata['contents'][0]);
?>
<br /><br /><br />
    <table border="2" class="table table-striped table-bordered table-hover">
        <tr>
            <?php foreach( $headings as &$heading ): ?>
                    <th><?php echo $heading; ?></th>
                <?php endforeach; ?>
            </tr>
            <?php foreach( $fileMetadata['contents'] as &$file ): ?>
                <tr>
                    <?php foreach( $file as &$data ): ?>
                        <td><?php echo $data; ?></td>
                    <?php endforeach; ?>
                </tr>
            <?php endforeach; ?>
        </table>

我想删掉一些不需要的列,例如 rev、thumb_exists 等... 在此处输入图像描述

这是数组的 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
)

请你告诉我如何从表中删除某些列或从数组中删除这些部分。

谢谢,马库斯

4

2 回答 2

2

我们再见面!既然潜伏在这里,那我也不妨给出一个答案。为了以最少的工作量改变你已经拥有的东西,而不是通过你的数组来挖掘未设置的值,你可以制作一个标题/列的数组来删除并使用它来检查你的 foreach 值。

<?php
    $fileMetadata = $dbxClient->getMetadataWithChildren("/upload");
    $headings = array_keys($fileMetadata['contents'][0]);

    //Add field names to remove in array below
    $remove = array( 'is_dir', 'client_mtime' );
?>
<br /><br /><br />
<table border="2" class="table table-striped table-bordered table-hover">
    <tr>
        <?php foreach( $headings as &$heading ): ?>

            <!-- If statement added below, excludes defined fields to remove -->
            <?php if( !in_array($heading, $remove) ): ?>
                <th><?php echo $heading; ?></th>
            <?php endif; ?>

        <?php endforeach; ?>
    </tr>
    <?php foreach( $fileMetadata['contents'] as &$file ): ?>
        <tr>

            <!-- Changed foreach to pull $key as well -->
            <?php foreach( $file as $key => &$data ): ?>

                <!-- Added another if statement -->
                <?php if( !in_array($key, $remove) ): ?>
                    <td><?php echo $data; ?></td>
                <?php endif; ?>

            <?php endforeach; ?>
        </tr>
    <?php endforeach; ?>
</table>

可能不是最漂亮的方法,但它可能是最简单的方法之一。

如果您想正确执行此操作,使用递归函数来取消设置您指定的任何字段可能会有所帮助。在这种情况下,您可以这样做:

function removeFields( $fields, &$array )
{
    foreach( $array as $key => &$value ) {

        if( is_array($value) ) {

            removeFields( $fields, $value );
        }
        else {

            if( in_array( $key, $fields ) ) {

                unset( $array[$key] );
            }
        }
    }
}
//Still have to define values you don't want
$remove = array( 'thumb_exists', 'is_dir', 'root' );

removeFields( $remove, $fileMetadata );

print_r( $fileMetadata );

上述内容应在您检索之前完成$headings = array_keys($fileMetadata['contents'][0]);,这样在删除标题之前就不会获得标题。

于 2013-08-29T22:28:29.373 回答
0

不特定于 Dropbox,您可以使用unset( http://php.net/manual/en/function.unset.php ) 从数组中删除元素。
例如,要删除列revthumb_exists您可以循环使用$fileMetadata['contents']值(代码未经测试):

while(list($key,$value)=each($fileMetadata['contents'])) {
    unset($fileMetadata['contents'][$key]['rev']);
    unset($fileMetadata['contents'][$key]['thumb_exists']);
}
于 2013-08-29T22:14:35.630 回答