способ разбора массива данных S3 - PullRequest
0 голосов
/ 29 июня 2010

Если, например, у меня был такой массив:

array(34) {
  ["ahostel.lt/img/background.png"]=>
  array(4) {
    ["name"]=>
    string(29) "ahostel.lt/img/background.png"
    ["time"]=>
    int(1277819688)
    ["size"]=>
    int(36811)
    ["hash"]=>
    string(32) "2600e98e10aba543fb2637b701dec4f3"
  }
  ["ahostel.lt/img/body-navigation-bg.png"]=>
  array(4) {
    ["name"]=>
    string(37) "ahostel.lt/img/body-navigation-bg.png"
    ["time"]=>
    int(1277819688)
    ["size"]=>
    int(409)
    ["hash"]=>
    string(32) "2e8743f24d46748c5919dfa44b51c2a5"
  }
  ["ahostel.lt/img/calendar-input.gif"]=>
  array(4) {
    ["name"]=>
    string(33) "ahostel.lt/img/calendar-input.gif"
    ["time"]=>
    int(1277819688)
    ["size"]=>
    int(630)
    ["hash"]=>
    string(32) "45d5148e7937fc75a530d7ceb73b7bc8"
  }
  ["ahostel.lt/img/facebook-icon.png"]=>
  array(4) {
    ["name"]=>
    string(32) "ahostel.lt/img/facebook-icon.png"
    ["time"]=>
    int(1277819688)
    ["size"]=>
    int(1090)
    ["hash"]=>
    string(32) "8a76e313b097f53d0f225a5db6f9ae6b"
  }
  ["ahostel.lt/img/favicon.png"]=>
  array(4) {
    ["name"]=>
    string(26) "ahostel.lt/img/favicon.png"
    ["time"]=>
    int(1277819689)
    ["size"]=>
    int(505)
    ["hash"]=>
    string(32) "daa5091eb2c059fc36b54d521e589a50"
  }
[...]

Как лучше всего получить все каталоги и файлы (хотя и в отдельных массивах) по пути ahostel.lt / img / . У меня сейчас много циклов foreach, и это не похоже на то, чтобы идти к хорошему решению.

1 Ответ

0 голосов
/ 29 июня 2010
$files          = array();
$directories    = array();

foreach($this->file_system as $key => $file_object_info)
{
    // make sure this is the requested path and exclude it from appearaning twice
    if(strpos($key, $path) === 0 && $key !== $path)
    {
        $relative_path  = mb_substr($key, mb_strlen($path));

        // this is a file
        if(strpos($relative_path, '/') === FALSE)
        {
            $files[$key]        = $file_object_info;
        }
        // this is a directory
        elseif(!substr($relative_path, strpos($relative_path, '/') + 1))
        {
            $directories[$key]  = $file_object_info;
        }
    }
}

Я думаю, что это самое лучшее, что я могу оптимизировать. Хотя это не так плохо, как я.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...