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.
$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.