变量设置为从JSON清空,不返回null

时间:2013-05-16 08:34:07

标签: php json

我正在调用JSON文件中的数据。我的一个要素是:

"mainImg_select":""

有时它有一个值,有时它不会 - 在这种情况下它是空的。我把这个(以及其他)变量放在一个名为Product的对象中。

尝试设置$product -> mainImg时,我正在尝试查看JSON值是否为空。如果它是空的,我想获得另一组图像$more_imgs的第一个值,并将其作为主图像。这是我的代码:

if(!is_null($mainImg)) {
    $product->mainImage = $html->find($mainImg, 0)->src;
    for ($idx = 0; $idx < 10; $idx++) {
        $more = $html->find($more_imgs, $idx);
        if (!is_null($more)) {
            $product->moreImages[$idx] = $more->src;
        } else {
            return;
        }
    }
} else {
    for ($idx = 0; $idx < 10; $idx++) {
        $more = $html->find($more_imgs, $idx);
        if (($idx == 0) && (!is_null($more))) {
            $product->mainImage = $more->src;
        } elseif (!is_null($more)) {
            $product->moreImages[$idx] = $more->src;
        } else {
            return;
        }
    }
}

当我运行代码时,我得到与Notice: Trying to get property of non-object

相关的$product->mainImage = $html->find($mainImg, 0)->src;

我认为这与它上面的if(!is_null($mainImg))有关,因为$ mainImg应该是JSON中定义的null。如果没有,这里最好用的是什么?

编辑:这里有一些更详细的代码,用于设置Product对象: http://pastebin.com/EEUgpwgn

2 个答案:

答案 0 :(得分:1)

是否在您的HTML上找不到$mainImg;代码$html->find($mainImg, 0)将返回null,然后您将尝试访问src对象的null参数。

(来自Documentation of the php simple HTML Parser Library

// Find (N)th anchor, returns element object or null if not found (zero based)
$ret = $html->find('a', 0);

你必须这样做:

if (null !== ($img = $html->find($mainImg, 0))) {
   $imgSrc = $img->src; // Here the HTML Element exists and you can access to the src parameter
}

答案 1 :(得分:1)

您应该将!is_null更改为!empty,因为is_null()即使“mainImg_select”等于空字符串“”也会返回false。