我正在Internet上使用一个“获取第一个图像脚本”,但出现错误:
PHP注意:未定义偏移量:0
脚本是:
function get_first_image() {
global $post, $posts;
$first_img = '';
ob_start();
ob_end_clean();
$output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i',$post->post_content, $matches);
$first_img = $matches [1] [0];
return $first_img;
}
这可以解决吗?
答案 0 :(得分:1)
根据正则表达式,如果<img>
标签没有src属性或根本没有<img>
标签,则可能会发生这种情况。
正如其他人所建议的那样,您可以首先通过检查$matches
来解决此问题,但是我想提出一种替代方法,该方法对于解析php中的html可能更健壮,因为< strong> using regex to do this is discouraged 。
function get_first_image() {
global $post;
$first_img = '';
$dom = new DOMDocument();
$dom->loadHtml($post->post_content);
foreach ($dom->getElementsByTagName('img') as $img) {
if ($img->hasAttribute('src')) {
$first_image = $img->getAttribute('src');
break;
}
}
return $first_img;
}
上面的函数使用php的DOMDocument Class遍历<img>
标签,并获取src属性(如果存在)。 (注意:我不知道它们的作用是出于什么目的,因此我从代码中删除了ob_start()
和ob_end_clean()
函数)
答案 1 :(得分:0)
运算符之前:
$first_img = $matches [1] [0];
插入行:
var_dump($matches);
请确保$ matches是一个数组,并且有两个维度。
答案 2 :(得分:0)
您可以这样做:
$first_img = isset($matches[1][0]) ? $matches[1][0] : false;
如果此二维数组中的第一个位置不存在,则将返回false。