如何根据特定元素的值有条件地删除子数组


How to conditionally remove subarrays based on specific element's value?

我有一个包含 13 个元素的数组

$vcpes= 
array:13 [▼
  0 => array:23 [▼
    "cpe_mac" => "665544332211"
    "bandwidth_max_up" => 300000
    "bandwidth_max_down" => 500000
    "filter_icmp_inbound" => null
    "dmz_enabled" => null
    "dmz_host" => null
    "vlan_id" => null
    "dns" => []
    "xdns_mode" => null
    "cfprofileid" => null
    "stub_response" => null
    "acl_mode" => null
    "portal_url" => null
    "fullbandwidth_max_up" => null
    "fullbandwidth_max_down" => null
    "fullbandwidth_guaranty_up" => null
    "fullbandwidth_guaranty_down" => null
    "account_id" => 1000 // <--- Keep 
    "location_id" => null
    "network_count" => null
    "group_name" => null
    "vse_id" => null
    "firewall_enabled" => null
  ]
  1 => array:23 [▼
    "cpe_mac" => "213243546576"
    "bandwidth_max_up" => null
    "bandwidth_max_down" => null
    "filter_icmp_inbound" => null
    "dmz_enabled" => null
    "dmz_host" => null
    "vlan_id" => null
    "dns" => []
    "xdns_mode" => null
    "cfprofileid" => null
    "stub_response" => null
    "acl_mode" => null
    "portal_url" => null
    "fullbandwidth_max_up" => null
    "fullbandwidth_max_down" => null
    "fullbandwidth_guaranty_up" => null
    "fullbandwidth_guaranty_down" => null
    "account_id" => null  // <--- Delete
    "location_id" => null
    "network_count" => null
    "group_name" => null
    "vse_id" => null
    "firewall_enabled" => null
  ]
  2 => array:23 [▶]
  3 => array:23 [▶]
  4 => array:23 [▶]
  5 => array:23 [▶]
  6 => array:23 [▶]
  7 => array:23 [▶]
  8 => array:23 [▶]
  9 => array:23 [▶]
  10 => array:23 [▶]
  11 => array:23 [▶]
  12 => array:23 [▶]
]

我想删除那些有account_id == null.

我试图解码它:

$vcpes = json_decode (json_encode ( $vcpes), FALSE);

并检查它:

foreach($vcpes as $vcpe){
    if($vcpe->account_id == null){
        //delete it
    }else{
        //don't delete it
    }
}

我希望有人能给我一点提示。

->用于获取对象的属性。要从数组中获取值,请使用$array['key']表示法。

foreach($vcpes as $i => $vcpe){
    if ($vcpe['account_id'] === null) {
        unset($vcpes[$i]);
    }
}

您可以尝试这种方式,或者仅使用array_filter() Baker评论@Mark

$finalArray = [];
foreach($vcpes as $vcpe){
    if($vcpe->account_id != null){
        $finalArray[] = $vcpe;
    }
}
print '<pre>';
print_r($finalArray);
print '</pre>';