我正在尝试从函数创建一个数组。
功能:
$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 []数组。
答案 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)))