substr() PHP 不适用于数组元素

substr() PHP not working for array elements

    $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 开头的文件。但是,由于某种原因,substr() 函数不起作用。它不会从文件名中提取子字符串。因此,if 语句不起作用。任何人都知道为什么会发生这种情况以及如何解决它?

$files[0] 包含匹配整个正则表达式的字符串,因此 substr($value, 0, 3) 总是 "<a "。您应该将 $files 设置为 $files[1],而不是 $files[0],它包含 ([^"]+) 模式的所有匹配项。

其实最好不要用正则表达式来解析HTML。使用 DOM 解析器库,例如 DOMDocument class.