我有一个xml文件,结构如下:
onClick={clickButton.bind(this, event, someArgument)}
现在我正在加载此文件并创建一个数组:
<categories>
<category>
<id>3</id>
<title><![CDATA[Testname]]></title>
<text><![CDATA[]]></text>
<keywords><![CDATA[]]></keywords>
<description><![CDATA[]]></description>
</category>
</categories>
这会生成以下结果(print_r输出):
$xmlData = simplexml_load_file( 'categories.xml', null, LIBXML_NOCDATA);
$array = json_decode(json_encode($xmlData), true);
这是我的问题,我怎么能删除那些空数组?我尝试使用数组过滤器,但这不起作用。 (我需要钥匙,但它们应该是空的)
我知道会有一种方法,在我的下一步中,我根据需要重命名数组键,我可以在foreach循环中检查空数组,但我认为有一种更简单的方法,因为每个字段(除了id)在xml文件中可能为空。
Array
(
[@attributes] => Array
(
[version] => 1.0
)
[categories] => Array
(
[category] => Array
(
[0] => Array
(
[id] => 3
[title] => Testname
[text] => Array
(
)
[keywords] => Array
(
)
[description] => Array
(
)
)
)
)
)
有人有想法,我在json_decode之后可以做些什么?或者,对于我想要在这里完成的所有事情,还有一种更简单的方法吗?
谢谢!
答案 0 :(得分:2)
每当我看到有人使用json_decode(json_encode())
黑客时,就会让我感到难过。您不需要将SimpleXML对象转换为数组以循环它,只需阅读the usage examples in the manual。
如果直接遍历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)的文本内容,并为空元素提供一个空字符串。
答案 1 :(得分:0)
希望这会奏效。 PHP code demo
<?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);