0

敬礼、コードの長老たち、

私は PHP の呪文を習得しようとしていますが、強力な獣を倒すためにあなたの助けが必要です。

PHPでREST APIを作っています。関数の 1 つは、ディレクトリ内の png のリストを返す GET です。しかし、1 つの配列を返す代わりに、複数の配列を返します (反復ごとに 1 つ?)。

私が欲しい:

["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);
}
4

2 に答える 2

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; 
于 2012-02-18T12:12:15.120 に答える
0

あなたのループについて考えてください。ループするたびに json_encode($pic_array) をエコーし​​ています。したがって、最初のループでは最初のファイルだけが残り、2 番目のループでは ... 2 つのファイルが印刷されます。などなど

于 2012-02-18T12:14:50.020 に答える