Php 从使用simplexml生成的多维数组中删除空数组
我有一个结构如下的xml文件:Php 从使用simplexml生成的多维数组中删除空数组,php,arrays,xml,multidimensional-array,simplexml,Php,Arrays,Xml,Multidimensional Array,Simplexml,我有一个结构如下的xml文件: <categories> <category> <id>3</id> <title><![CDATA[Testname]]></title> <text><![CDATA[]]></text> <keywords><![CDATA[]]></keywords> <
<categories>
<category>
<id>3</id>
<title><![CDATA[Testname]]></title>
<text><![CDATA[]]></text>
<keywords><![CDATA[]]></keywords>
<description><![CDATA[]]></description>
</category>
</categories>
这将生成以下结果(打印输出):
我的问题是,如何删除这些空数组?我用数组过滤器试过了,但没用。(我需要钥匙,但应该是空的)
我知道有一种方法,在下一步中,我将根据需要重命名数组键,我可以在foreach循环中检查空数组,但我认为有一种更简单的方法,因为xml文件中的每个字段(id除外)都可以为空
foreach($array['categories']['category'] as $key => $category){
$results[$key]['id'] = $category['id'];
$results[$key]['headline'] = $category['title'];
$results[$key]['content'] = $category['text'];
$results[$key]['metaKeywords'] = $category['keywords'];
$results[$key]['metaDescription'] = $category['description'];
}
有人有想法吗,在json_解码后我能做什么?还是有一个更简单的方法可以让我在这里完成所有的事情
谢谢 希望这能奏效
每次我看到有人用那json\u decode(json\u encode())
hack,我都很难过。不需要将SimpleXML对象转换为数组来循环它,只需读取即可
如果直接在SimpleXML对象上循环,则永远不会获得这些数组,因此永远不需要删除它们:
$xmlData = simplexml_load_file('categories.xml'); // LIBXML_NOCDATA is NOT needed
foreach($xmlData->categories->category as $key => $category){
$results[$key]['id'] = (string)$category->id;
$results[$key]['headline'] = (string)$category->title;
$results[$key]['content'] = (string)$category->text;
$results[$key]['metaKeywords'] = (string)$category->keywords;
$results[$key]['metaDescription'] = (string)$category->description;
}
(string)
告诉SimpleXML您想要特定元素(包括CDATA)的文本内容,并将为空元素提供一个空字符串。因此您首先迭代类别
以删除空值,然后再次迭代类别
以创建$results
。你为什么要在tiwce做呢?我已经按照你的建议尝试过了,但是我没有得到完整的数组。请看这里:
foreach($array['categories']['category'] as $key => $category){
$results[$key]['id'] = $category['id'];
$results[$key]['headline'] = $category['title'];
$results[$key]['content'] = $category['text'];
$results[$key]['metaKeywords'] = $category['keywords'];
$results[$key]['metaDescription'] = $category['description'];
}
<?php
$result=Array
(
"categories" => Array
(
"category" => Array
(
0 => Array
(
"id" => 3,
"title" => "Testname",
"text" => Array
(
),
"keywords" => Array
(
),
"description" => Array
(
)
)
)
)
);
$results=array();
foreach($result['categories']['category'] as $key => $category){
$results[$key]['id'] = $category['id'];
$results[$key]['headline'] = $category['title'];
$results[$key]['content'] = is_array($category['text']) && count($category['text'])>0 ? $category['text'] : false;
$results[$key]['metaKeywords'] = is_array($category['keywords']) && count($category['keywords'])>0 ? $category['keywords'] : false;
$results[$key]['metaDescription'] = is_array($category['description']) && count($category['description'])>0 ? $category['description'] : false;
$results[$key]=array_filter($results[$key]);
}
print_r($results);
$xmlData = simplexml_load_file('categories.xml'); // LIBXML_NOCDATA is NOT needed
foreach($xmlData->categories->category as $key => $category){
$results[$key]['id'] = (string)$category->id;
$results[$key]['headline'] = (string)$category->title;
$results[$key]['content'] = (string)$category->text;
$results[$key]['metaKeywords'] = (string)$category->keywords;
$results[$key]['metaDescription'] = (string)$category->description;
}