我正在制作一个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
)
请告诉我如何从表中删除某些颜色或从阵列中删除这些部分。
谢谢, 马库斯
答案 0 :(得分:2)
<?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]);
之前完成,这样就不会在删除之前获得标题。
答案 1 :(得分:0)
不专门针对Dropbox,您可以使用unset
(http://php.net/manual/en/function.unset.php)从数组中删除元素。
例如,要删除列rev
和thumb_exists
,您可以循环$fileMetadata['contents']
值(代码未经过测试):
while(list($key,$value)=each($fileMetadata['contents'])) {
unset($fileMetadata['contents'][$key]['rev']);
unset($fileMetadata['contents'][$key]['thumb_exists']);
}