2017-02-02 14 views
0
$nomadspage = "http://www.nomads.ncep.noaa.gov/pub/data/nccf/com/gfs/prod/";  
    $html = file_get_contents($nomadspage); 
    $count = preg_match_all('/<a href="([^"]+)">[^<]*<\/a>/i', $html, $files); 

    unset($files[1]); //deletes repeat array from preg_match 
    $files = $files[0]; //deletes container array from preg_match 

    foreach ($files as $key => $value) { 
     if (substr($value, 0, 3) !== "gfs") { 
      unset($files[$key]); 
     } 
    } 

    var_dump($files); 

HTTPディレクトリのファイル名を持つ配列があります。これらのファイル名をフィルタリングして、gfsの3文字で始まらないファイルがすべてアレイから削除されるようにします。ただし、何らかの理由でsubstr()機能が動作しません。ファイル名から部分文字列を引き出すことはありません。したがって、ifステートメントは機能しません。なぜこれが起こっているのか、それを修正する方法は誰にも分かりません。substr()配列要素でPHPが機能しない

+0

'$ files'配列のサブセットを教えてもらえますか? – forrestmid

+1

'preg_match_all()'の問題でなければなりません。同様に、あなたはあなたが考える結果を得ていない。とにかくHTMLを解析するときは、[DOMDocument](http://php.net/manual/en/class.domdocument.php)を使うべきでしょう。さらに良いことに、NOAA情報はJSONレスポンスとして利用できると確信しています。 – PHPglue

答えて

3

$files[0]には、正規表現全体と一致する文字列が含まれているため、substr($value, 0, 3)は常に"<a "です。 $files$files[0]ではなく$files[1]に設定する必要があります。([^"]+)パターンのすべての一致が含まれています。

実際には、HTMLを解析するために正規表現を使用しないことをお勧めします。 DOMDocumentクラスなどのDOMパーサライブラリを使用します。

+0

Thx、素晴らしい作品:) –

関連する問題