PHP注意:未定义偏移量:0可修复吗?

时间:2018-08-07 19:14:08

标签: php wordpress

我正在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;
}

这可以解决吗?

3 个答案:

答案 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。