views:

21

answers:

1

If, for example, I had array like this:

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"
  }
[...]

What would be the best sollution to get all directories and files (in separate arrays, though) from a path ahostel.lt/img/. I now have many foreach cycles and this does not look like going towards a good solution.

A: 
$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;
        }
    }
}

I think this is the farest I can optimize it. It isn't as bad as I though it will be, though.

Guy