2012-02-18 64 views
0

拜,代码长老,执行opendir功能让我多阵列,而不只是一个

我在寻求掌握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); 
} 

回答

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; 
+0

非常感谢您的纠正和提示。我将从此坚持正确的缩进。 – playeren 2012-02-18 12:43:06

0

想想你的循环。每次循环时都会回显json_encode($ pic_array)。所以在第一个循环中,您只需要第一个文件,然后在第二个循环中打印两个文件。等等等等

+0

谢谢! json_encode现在在循环之外,并且恰好只返回一个数组。 – playeren 2012-02-18 12:44:00

相关问题