微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 DOM 元素数组中取消设置空值

如何解决在 DOM 元素数组中取消设置空值

我正在 PHP 中迭代槽数组,结果如下: 它是一个包含 DOM Crawler 库中的 DOM 元素的数组。

 {
  "data": [
    {
      "content": null,"property": null
    },{
      "content": "Build your communication strategy and unleash the effectiveness and efficiency of your storytelling","property": null
    }
   }
...

在我的代码中:

    $crawler = new Crawler(file_get_contents($url));
    $items =$crawler->filter('Meta');

    $MetaData = [];
    foreach ($items as $item) {
            $itemCrawler = new Crawler($item);
            $MetaData[] = [
                'content' => $itemCrawler->eq(0)->attr('content'),'property' => $itemCrawler->eq(0)->attr('property')
            ];
    }

我试图完成的是摆脱两个字段都是 NULL 的行,就像第一个一样(如果有一个字段,比如第二个而不是跳过)。

尝试使用 array_filter() 但没有成功。

return array_filter($MetaData,'strlen');

解决方法

实际上,array_filter() 适用于空元素。

即使元素值为空,如果键在那里,也不会删除空值。

在代码中:

$item 有两个键

所以,添加明确的条件来检查空白元素,请修改代码,如:

$data = [];
$items =$service->get('allData');
foreach ($items as $item) {
    if (! empty($item['content']) && ! empty($item['property'])) {
    $data[] = [
        'content' => $item['content'],'property' => $item['property]
    ];
}
}
,

不知道为什么第一个答案不会被接受。只需稍作调整即可使其正常工作。

在你的循环中

$itemCrawler = new Crawler($item);
$content = $itemCrawler->eq(0)->attr('content');
$property = $itemCrawler->eq(0)->attr('property');
if(!is_null($content) || !is_null($property)) {
    $metaData[] = compact('content','property');
}

或者如果你在拿到array_filter数组后坚持使用$metaData

$filteredMetaData = array_filter($metaData,function($item) {
    return !is_null($item['content']) || !is_null($item['property']);
});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。