从php中的函数回显数组

时间:2016-09-22 21:35:35

标签: php arrays

我正在尝试从函数创建一个数组。

功能:

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

填充我有以下功能:

$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);
}

然后我试着按照以下方式回应:

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']; }
    }
}

我只是学习函数,并且对数组的经验非常有限,主要是使用mysql数组,所以我不知道如何以这种方式编写它,它会根据需要正确地返回$ data []数组。

3 个答案:

答案 0 :(得分:2)

您反对使用$results$data

在这里,您使用$results数组作为输入/输出:

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

之后您尝试打印$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']; }
  }
}

但是您编写代码的方式,您的所有需求都在$results。使用$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']; }
  }
}

答案 1 :(得分:0)

如果要打印整个阵列,请使用此选项。 print_r(array_values($ARR));

答案 2 :(得分:0)

我标记为正确的答案,基本上为我提供了答案,尽管它不是“完全”我想要的代码。最终,我所要做的就是改变我的变量并输出一个触摸。

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

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

然后

echo $tree; // I can't believe I missed this

然后

return $results;

return $data;

最后,因为我正在用usort排序时间,我不得不改变

'time' => filemtime($path)

'time' => date('F d Y h:i A', (filemtime($path)))