GVKun编程网logo

php – 以递归方式从多维数组中删除空元素和子数组(php数组删除指定元素)

23

关于php–以递归方式从多维数组中删除空元素和子数组和php数组删除指定元素的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于c#–以递归方式从目录中删除文件,但保持dir结构不变、java

关于php – 以递归方式从多维数组中删除空元素和子数组php数组删除指定元素的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于c# – 以递归方式从目录中删除文件,但保持dir结构不变、java – 以递归方式从XML中删除空节点、javascript – 从多维数组中删除元素、php – 从多维数组中删除数组等相关知识的信息别忘了在本站进行查找喔。

本文目录一览:

php – 以递归方式从多维数组中删除空元素和子数组(php数组删除指定元素)

php – 以递归方式从多维数组中删除空元素和子数组(php数组删除指定元素)

我似乎无法找到一个简单,直接的解决方案来解决从 PHP中的数组中删除空元素的古老问题.

我的输入数组可能如下所示:

Array ( [0] => Array ( [Name] => [EmailAddress] => ) )

(依此类推,如果有更多数据,虽然可能没有……)

如果它看起来像上面那样,我希望它在处理之后完全是空的.

所以print_r($array);输出:

Array ( )

如果我运行$arrayX = array_filter($arrayX);我仍然得到相同的print_r输出.我看过的每个地方都暗示这是在PHP5中删除空数组元素的最简单方法.

我也试过$arrayX = array_filter($arrayX,’empty_array’);但我收到以下错误:

Warning: array_filter() [function.array-filter]: The second argument,’empty_array’,should be a valid callback

我究竟做错了什么?

解决方法

尝试使用 array_map()将过滤器应用于$array中的每个数组:

$array = array_map('array_filter',$array);
$array = array_filter($array);

演示:http://codepad.org/xfXEeApj

c# – 以递归方式从目录中删除文件,但保持dir结构不变

c# – 以递归方式从目录中删除文件,但保持dir结构不变

为了清理测试文件,我尝试执行以下操作.但它不清除文件以及不生成错误.

我错过了一些明显的东西吗

private void CleanUpTempDirFiles()
    {
        var fileGenerationDir = new DirectoryInfo(Path.Combine(Path.GetTempPath(),"TestFilesDir"));

        fileGenerationDir.GetDirectories().ToList().ForEach(dir => dir.GetFiles().ToList().ForEach(file => file.Delete()));
    }

解决方法

您可以使用 @L_301_0@获取所有子目录中的所有文件
fileGenerationDir.GetFiles("*",SearchOption.AllDirectories).ToList().ForEach(file=>file.Delete());

java – 以递归方式从XML中删除空节点

java – 以递归方式从XML中删除空节点

我想从XML元素中删除空节点.
这个xml是从供应商生成的,我没有xml生成的控制权.但由于XML几乎没有空节点,我需要递归删除这些空节点.

这个xml来自OMElement,我使用[XMLUtils] [1]从这个对象获取一个元素
示例XML

<A>
  <B>
    <C>
      <C1>
        <C11>something</C11>
        <C12>something</C12>
      </C1>
    </C>
    <D>
      <D1>
        <D11>
          <D111 operation="create">
            <Node>something else</Node>
          </D11>
        </D11>
      </D1>
      <D2>
        <D21>

        </D21>
      </D2>
    </D>
  </B>
</A> 

由于D21是一个空节点我想删除D21,因为现在D2是一个空节点我想删除D2,但由于D有D1我不想删除D.

同样地,我有可能得到

<A>
  <B>
    <C>

    </C>
  </B>
</A>

现在因为C是空的,我想删除C然后B然后最终删除节点A.
我试图在Node中使用removeChild()方法执行此操作

但到目前为止,我无法递归删除它们.
有什么建议可以递归删除它们吗?

我递归地尝试获取节点和节点长度.但节点长度没有帮助

if(childNode.getChildNodes().getLength() == 0 ){
       childNode.getParentNode().removeChild(childNode);

               }

问候
Dheeraj Joshi

解决方法:

这样做,只需创建一个“深入”的递归函数,然后在“备份树”的路上删除空节点,这将同时删除D21和D2.

public static void main(String[] args) throws Exception {

    DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    String input = "<A><B><C><C1><C11>something</C11><C12>something</C12></C1></C><D><D1><D11><D111 operation=\"create\"><Node>something else</Node></D111></D11></D1><D2><D21></D21></D2></D></B></A>";

    Document document = builder.parse(new InputSource(new StringReader(
            input)));

    removeNodes(document);

    Transformer transformer = TransformerFactory.newInstance()
            .newTransformer();
    transformer.setoutputProperty(OutputKeys.INDENT, "yes");
    StreamResult result = new StreamResult(new StringWriter());
    transformer.transform(new DOMSource(document), result);
    System.out.println(result.getWriter().toString());
}

public static void removeNodes(Node node) {
    NodeList list = node.getChildNodes();
    for (int i = 0; i < list.getLength(); i++) {
        removeNodes(list.item(i));
    }
    boolean emptyElement = node.getNodeType() == Node.ELEMENT_NODE
            && node.getChildNodes().getLength() == 0;
    boolean emptyText = node.getNodeType() == Node.TEXT_NODE
            && node.getNodeValue().trim().isEmpty();
    if (emptyElement || emptyText) {
        node.getParentNode().removeChild(node);
    }
}

产量

<A>
<B>
<C>
<C1>
<C11>something</C11>
<C12>something</C12>
</C1>
</C>
<D>
<D1>
<D11>
<D111 operation="create">
<Node>something else</Node>
</D111>
</D11>
</D1>
</D>
</B>
</A>

javascript – 从多维数组中删除元素

javascript – 从多维数组中删除元素

我有以下多维数组:

{"2":{"cid":"2","uid":"2"},"1":{"cid":"1","uid":"3"}}

在这个例子中我想删除

"1":{"cid":"1","uid":"3"}

从中.
我已经尝试了我在stackoverflow上找到的所有解决方案,并且无法使它们中的任何一个工作.我主要是PHP的人,所以我可能会错过一些重要的东西吗?

解决方法

只需使用适当的属性删除即可.

var obj = {"2":{"cid":"2","uid":"3"}};

delete obj["1"];

注意“在1左右将其标记为标识符而不是数组索引!

编辑
正如评论中所指出的,无论你如何处理[1]属性,obj都是一个对象,没有数组.我的最后一点是为了清楚地表明你正在使用一个对象而不是一个数组.

根据我的经验,大多数人将整数属性与数组和字符串属性与对象相关联.所以我认为以给定的方式强调财产可能更有帮助.

php – 从多维数组中删除数组

php – 从多维数组中删除数组

你好,我有一个看起来像这样的会话:

array(3) {
  ["counter"]=>
  int(0)
  ["currentItem"]=>
  string(1) "2"
  ["addedToCart"]=>
  array(12) {
    [0]=>
    array(11) {
      ["aantal"]=>
      int(1)
      ["id"]=>
      string(1) "1"
      ["filmtitel"]=>
      string(11) "a_bugs_life"
      ["film_id"]=>
      string(1) "2"
      ["zaal_id"]=>
      string(1) "1"
      ["zaaltitel"]=>
      string(6) "zaal 1"
      ["tijdstip"]=>
      string(8) "15:00:00"
      ["stoeltjes"]=>
      string(2) "21"
      ["dag"]=>
      string(8) "woensdag"
      ["verwijder"]=>
      int(2)
      ["vertoningId"]=>
      string(1) "3"
    }
    [1]=>
    array(11) {
      ["aantal"]=>
      int(1)
      ["id"]=>
      string(1) "1"
      ["filmtitel"]=>
      string(11) "a_bugs_life"
      ["film_id"]=>
      string(1) "2"
      ["zaal_id"]=>
      string(1) "1"
      ["zaaltitel"]=>
      string(6) "zaal 1"
      ["tijdstip"]=>
      string(8) "15:00:00"
      ["stoeltjes"]=>
      string(1) "7"
      ["dag"]=>
      string(8) "woensdag"
      ["verwijder"]=>
      int(2)
      ["vertoningId"]=>
      string(1) "3"
    }
    [2]=>
    array(11) {
      ["aantal"]=>
      int(1)
      ["id"]=>
      string(1) "1"
      ["filmtitel"]=>
      string(11) "a_bugs_life"
      ["film_id"]=>
      string(1) "2"
      ["zaal_id"]=>
      string(1) "1"
      ["zaaltitel"]=>
      string(6) "zaal 1"
      ["tijdstip"]=>
      string(8) "15:00:00"
      ["stoeltjes"]=>
      string(2) "22"
      ["dag"]=>
      string(8) "woensdag"
      ["verwijder"]=>
      int(2)
      ["vertoningId"]=>
      string(1) "3"
    }
  }
}

现在,从$_SESSION [‘addedToCart]我想删除数组,如果他们符合某些条件,如.我尝试了以下内容.

foreach ($_SESSION["addedToCart"] as $arr) {
       if ($arr["stoeltjes"] == $stoeltje && $arr['film_id'] == $id) {
            unset($arr);
       }
 }

这似乎没有用,它没有删除任何东西,我做了一个var_dump来检查变量$stoeltje和$id是否很好,他们很好,所以不能成为问题.
我能在这种情况下使用未设置吗?

解决方法:

foreach ($_SESSION["addedToCart"] as &$arr)

&安培;将您的变量转换为引用而不是副本.通常这就足够了. unset()仅适用于当前范围内的数据(因此您的foreach循环)保持原始状态不变(有关详细信息,请参阅unset()).

相反,你可以这样做:

foreach ($_SESSION["addedToCart"] as $key => $val)
{
    if ($val["stoeltjes"] == $stoeltje && $val['film_id'] == $id) {
        unset($_SESSION["addedToCart"][$key]);
   }
}

关于php – 以递归方式从多维数组中删除空元素和子数组php数组删除指定元素的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于c# – 以递归方式从目录中删除文件,但保持dir结构不变、java – 以递归方式从XML中删除空节点、javascript – 从多维数组中删除元素、php – 从多维数组中删除数组的相关知识,请在本站寻找。

本文标签: