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