我需要列出来自 Amazon s3 的对象,以便最新上传的对象应该列在顶部?怎么做?
$result = $client->listObjects(array(
// Bucket is required
'Bucket' => 'string',
'Delimiter' => 'string',
'EncodingType' => 'string',
'Marker' => 'string',
'MaxKeys' => integer,
'Prefix' => 'string',
));
没有选项可以对上面进行排序?
下面是我的代码,
$items = $this->get('my.aws_s3.client')->listObjects(array(
'Bucket' => "my_bucket"
));
foreach ($items as $i) {
var_dump($i);
}
下面是我的输出,
string 'my_bucket' (length=19)
string '' (length=0)
string '' (length=0)
string '1000' (length=4)
boolean true
array (size=1000)
0 =>
array (size=6)
'Key' => string '1286319624.tar.gz' (length=26)
'LastModified' => string '2010-10-05T23:00:50.000Z' (length=24)
'ETag' => string '"9118de4f6a8e1e21be99d791108eaa57"' (length=34)
'Size' => string '90460751' (length=8)
'Owner' =>
array (size=2)
'ID' => string '917a9ca91589caf57633aee246d4263777366b4d00aafa9ac3948910f6eb686f' (length=64)
'DisplayName' => string 'dbrckll' (length=7)
'StorageClass' => string 'STANDARD' (length=8)
1 =>
array (size=6)
'Key' => string '1286406023.tar.gz' (length=26)
'LastModified' => string '2010-10-06T23:00:50.000Z' (length=24)
'ETag' => string '"e0e94040702eb9e18a906140fb706767"' (length=34)
'Size' => string '90460758' (length=8)
'Owner' =>
array (size=2)
'ID' => string '917a9ca91589caf57633aee246d4263777366b4d00aafa9ac3948910f6eb686f' (length=64)
'DisplayName' => string 'dbrckll' (length=7)
'StorageClass' => string 'STANDARD' (length=8)
2 =>
如果您看到"上次修改时间",如果您看到"上次修改时间" 首先显示"上次修改时间" =>字符串"2010-10-05T23:00:50.000Z",然后 "最后修改时间" => 字符串 '2010-10-06T23:00:50.000Z'
如何按上次修改时间的降序对其进行排序?
建议
使用 Spl 迭代器,因此不幸的是,这实际上取决于您的实现。这是我使用迭代器的实现:
$iterator = $client->getListObjectsIterator([
'Bucket' => 'string',
'Prefix' => 'string',
'MAX' => 1000,
]);
$arrayIterator = new 'ArrayIterator($iterator->toArray());
$arrayIterator->uasort(function($a, $b){
$itemADate = (new DateTime($a['LastModified']));
$itemBDate = (new DateTime($b['LastModified']));
return $itemADate->diffInSeconds($itemBDate, false) > 0;
});
*日期时间只是一个碳实现
因为这是一个较旧的 s3 变体,我现在使用它
$objects = $s3->getIterator('ListObjects', [
'Bucket' => 'string',
'Prefix' => 'string'
]);
$Iterator = new 'ArrayIterator($objects);
$Iterator->uasort(function($a, $b){
$aDate = (new DateTime($a['LastModified']));
$bDate = (new DateTime($b['LastModified']));
return $aDate->diffInSeconds($bDate, false) > 0;
});