Вы можете сделать это, указав свой массив $folders
в качестве имени папки, а в качестве значения - массив подпапок:
<code>$objects = [
[
'Key' => 'dashboard/demo.consultive.test/user-data/nXb2K1feviqsjzuW7mgQG2Cghc1Kem8U/uploads/folder/',
'LastModified' => [
'date' => '2020-02-25 09:47:43.000000',
'timezone_type' => '2',
'timezone' => 'Z'
],
'ETag' => 'd41d8cd98f00b204e9800998ecf8427e',
'Size' => 0,
'StorageClass' => 'STANDARD'
],
[
'Key' => 'dashboard/demo.consultive.test/user-data/nXb2K1feviqsjzuW7mgQG2Cghc1Kem8U/uploads/general/BMS-Shield.txt',
'LastModified' => [
'date' => '2020-02-25 10:24:58.000000',
'timezone_type' => '2',
'timezone' => 'Z'
],
'ETag' => '5270e0e4f58c9b33eb7fc6f4cb3c8a04',
'Size' => 0,
'StorageClass' => 'STANDARD'
],
[
'Key' => 'dashboard/demo.consultive.test/user-data/nXb2K1feviqsjzuW7mgQG2Cghc1Kem8U/uploads/general/image-2.jpg',
'LastModified' => [
'date' => '2020-02-24 16:34:21.000000',
'timezone_type' => '2',
'timezone' => 'Z'
],
'ETag' => '1c6eaa239899913d732a4bca343a1eac',
'Size' => 0,
'StorageClass' => 'STANDARD'
],
[
'Key' => 'dashboard/demo.consultive.test/user-data/nXb2K1feviqsjzuW7mgQG2Cghc1Kem8U/uploads/planning/composer.json',
'LastModified' => [
'date' => '2020-02-24 16:34:45.000000',
'timezone_type' => '2',
'timezone' => 'Z'
],
'ETag' => 'b83a5f582075d5668c8bb092b2e20516',
'Size' => 62,
'StorageClass' => 'STANDARD'
] ,
[
'Key' => 'dashboard/demo.consultive.test/user-data/nXb2K1feviqsjzuW7mgQG2Cghc1Kem8U/uploads/test/',
'LastModified' => [
'date' => '2020-02-25 09:08:36.000000',
'timezone_type' => '2',
'timezone' => 'Z'
],
'ETag' => 'd41d8cd98f00b204e9800998ecf8427e',
'Size' => 0,
'StorageClass' => 'STANDARD'
]
];
$prefix = 'dashboard/demo.consultive.test/user-data/nXb2K1feviqsjzuW7mgQG2Cghc1Kem8U/uploads/';
$folders = [];
foreach ($objects as $object) {
$sub_folders = array();
$_object_ = str_replace($prefix, '', $object['Key']);
$_date_ = str_replace('+00:00', '', str_replace('T', ' ', $object['LastModified']));
if (strpos($_object_, '/') !== false && substr($_object_, -1) != '/') {
if (!in_array(strtok($_object_, '/'), $folders)) {
$folders[strtok($_object_, '/')][] = explode('/', $_object_)[1];
}
} elseif (strpos($_object_, '/') !== false) {
$folders[str_replace('/', '', $_object_)] = '';
}
}
echo '<pre>';
foreach($folders as $key => $folder){
echo $key.'<br/>';
if (is_array($folder)) {
foreach($folder as $f) {
echo ' -'.$f;
echo '<br/>';
}
} else {
echo '<br/>';
}
}
echo '
';
Отказ от ответственности: код работает и дает вам идею для лучшей логики c. Это не оптимизировано и не является лучшим решением. Но это решение.
https://wtools.io/php-sandbox/b0dL