Php 从使用simplexml生成的多维数组中删除空数组

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> <

我有一个结构如下的xml文件:

<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;
}