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

时间:2017-02-02 00:34:59

标签: php arrays key-value substr

    $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语句不起作用。有谁知道为什么会这样,以及如何解决它?

1 个答案:

答案 0 :(得分:3)

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

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