duanlianyun0462
2016-09-22 21:35
浏览 43
已采纳

从php中的函数回显数组

I am trying to create an array from a function.

The function:

$results = [];
function getDirEnties($directory, &$results) {
    $entries = scandir($directory);
    foreach ($entries as $item) {
        if (!in_array($item, ['.', '..']) && substr($item, 0, 1) !== '.') {
            $path = $directory . '/' . $item;
            if (is_dir($path)) {
                getDirEnties($path, $results);
            } else {
                $pathInfo = pathinfo($path);
                $name = $pathInfo['filename'];
                $type = 'unknown';
                if (!empty($pathInfo['extension'])) {
                    $name .= "." . $pathInfo['extension'];
                    switch (strtolower($pathInfo['extension'])) {
                        case "gif":
                        case "jpg":
                        case "png":
                        case "jpeg":
                        case "bmp":
                        //etc..
                        $type = 'image';
                        break;
                        case "mp4":
                        $type = 'media';
                        break;
                    }
                }
            $data = [
                'name' => $name,
                'path' => $pathInfo['dirname'],
                'type' => $type,
                'time' => filemtime($path)
                ];
            $results[] = $data;
            }
        }
    }
    return $results;
} 

to populate the function I have the following:

$stmt=$db->prepare('SELECT friend2 as username FROM list_friends 
                    WHERE (friend1 = :username AND friend2 <> :username) 
                    UNION
                    SELECT friend1 as username FROM list_friends
                    WHERE (friend2 = :username AND friend1 <> :username)');
$stmt->bindParam(':username', $username);
$stmt->execute();
$friend_rows = $stmt->fetchAll();
foreach ($friend_rows as $rows) {
    $friend = strtolower($rows['username']);
    $directoryToScan = '/path/to/'.$friend;
    $tree = getDirEnties($directoryToScan, $results);
}

I am then trying to echo it out as follows:

function cmp($a, $b)  {
    $ad = new DateTime($a['time']);
    $bd = new DateTime($b['time']);   
    if ($ad == $bd) {
        return 0;
    }
return $ad < $bd ? -1 : 1;
}
if ($data !== NULL) {
    usort($data, "cmp");
    for($i=(count($data)-1)-($feed-1);$i>=(count($data)-10)-($feed-1);$i--){
        if($data[$i]['type']=='image'){ echo $data[$i]['name']; }
    }
}

I am JUST learning functions and have VERY limited experience with arrays, mostly with mysql arrays so I have no idea how to write this in such a way it returns the $data[] array properly as needed.

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

3条回答 默认 最新

  • duanhao4156 2016-09-22 22:12
    最佳回答

    You inverted the use of $results and $data

    Here you use your $results array as input/output :

    $tree = getDirEnties($directoryToScan, $results);
    

    Then later you try to print $data

    if ($data !== NULL) {
      usort($data, "cmp");
      for($i=(count($data)-1)-($feed-1);$i>=(count($data)-10)-($feed-1);$i--){
        if($data[$i]['type']=='image'){ echo $data[$i]['name']; }
      }
    }
    

    But the way you written the code, all your needs are in $results. Use $results !

    if ($results !== NULL) {
      usort($results, "cmp");
      for($i=(count($results)-1)-($feed-1);$i>=(count($results)-10)-($feed-1);$i--){
        if($results[$i]['type']=='image'){ echo $results[$i]['name']; }
      }
    }
    
    评论
    解决 无用
    打赏 举报
查看更多回答(2条)

相关推荐 更多相似问题