首页 > 解决方案 > 根据是否包含 php 过滤数组

问题描述

我的目标是如果“record_type”为空,则从数组中删除整个对象。然后,我应该只剩下在数组中设置了 record_type 的数据。

我查看了数组过滤器,不确定如何定位数组“record_type”中的数据。我唯一的另一个想法是导入数据库,然后 SQL 查询我想要的内容,然后删除我拥有的数据,这更加矫枉过正。

<pre>


array:36 [▼
  0 => array:3 [▼
    "type" => "comment"
    "line_index" => 0
    "text_b64" => "OyBjUGFuZWwgZmlyc3Q6ODguMC4xMiAodXBkYXRlX3RpbWUpOjE2MTg1NDYxNDIgQ3BhbmVsOjpab25lRmlsZTo6VkVSU0lPTjoxLjMgaG9zdG5hbWU6cjExOC5sb24yLm15c2VjdXJlY2xvdWRob3N0LmNvbSBs ▶&quot;
  ]
  1 => array:3 [▼
    "line_index" => 1
    "text_b64" => "OyBab25lIGZpbGUgZm9yIG9ha3RyZWVkZW50YWxtb3J0aW1lci5jby51aw=="
    "type" => "comment"
  ]
  2 => array:3 [▼
    "text_b64" => "JFRUTCAxNDQwMA=="
    "line_index" => 2
    "type" => "control"
  ]
  3 => array:6 [▼
    "line_index" => 3
    "dname_b64" => "b2FrdHJlZWRlbnRhbG1vcnRpbWVyLmNvLnVrLg=="
    "record_type" => "SOA"
    "ttl" => 30
    "type" => "record"
    "data_b64" => array:7 [▶]
  ]
  4 => array:6 [▼
    "dname_b64" => "b2FrdHJlZWRlbnRhbG1vcnRpbWVyLmNvLnVrLg=="
    "line_index" => 10
    "record_type" => "NS"
    "ttl" => 30
    "type" => "record"
    "data_b64" => array:1 [▶]
  ]
  5 => array:6 [▼
    "ttl" => 30
    "dname_b64" => "b2FrdHJlZWRlbnRhbG1vcnRpbWVyLmNvLnVrLg=="
    "line_index" => 11
    "record_type" => "NS"
    "data_b64" => array:1 [▶]
    "type" => "record"
  ]
</pre>

标签: phparrays

解决方案


如果您的目标是过滤数组以删除任何没有record_type的内部数组,那么请使用array_filter回调函数fn来检查该函数是否record_type存在isset

array_filter($arr, fn($el)=>isset($el["record_type"]));

推荐阅读