致敬,代码长老,
我正在寻求掌握PHP的法术,现在需要你帮助杀死一个强大的野兽。
我正在使用PHP创建REST API。其中一个函数是GET,它返回dir中的png列表。但是它不是返回一个数组,而是返回多个数组(每次迭代一个?)。
我想:
["1.png","2.png","3.png"]
但我得到了:
["1.png"]["1.png","2.png"]["1.png","2.png","3.png"]
我表现出可耻和羞辱的可怜功能:
function getPics() {
$pic_array = Array();
$handle = opendir('/srv/dir/pics');
while (false !== ($file = readdir($handle))) {
if ($file!= "." && $file!= ".." &&!is_dir($file)) {
$namearr = explode('.',$file);
if ($namearr[count($namearr)-1] == 'png') $pic_array[] = $file;
}
echo json_encode($pic_array);
}
closedir($handle);
}
答案 0 :(得分:1)
你应该做一些适当的缩进,这将是非常明确的错误。您将echo json_encode()
放入循环中。这是一个更正版本:
function getPics()
{
$pic_array = Array();
$handle = opendir('/srv/dir/pics');
while ( false !== ($file = readdir($handle)) )
{
if ( $file=="." || $file==".." || is_dir($file) ) continue;
$namearr = explode('.',$file);
if ($namearr[count($namearr)-1] == 'png') $pic_array[] = $file;
}
echo json_encode($pic_array);
closedir($handle);
}
请注意,这种检查扩展失败的方法有一个小缺陷,因为名为“png”(没有扩展名)的文件将匹配。有几种方法可以解决这个问题,例如:使用pathinfo()
分析文件名。
PS。也不是这个:
if ( $file=="." || $file==".." || is_dir($file) ) continue;
可以写成
if ( is_dir($file) ) continue;
答案 1 :(得分:0)
想想你的循环。每次循环时都会回显json_encode($ pic_array)。所以在第一个循环中你只有第一个文件,然后在第二个循环...两个文件被打印。等等等等