取消 DOM 元素数组中的空值

Unset null values in array of DOM elements

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

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

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