3v4l.org

run code in 300+ PHP versions simultaneously
<?php $method_filters = [ 'exists' => [ 'full pallet' => [ 171 => [ 'pakkelabels_shipping_gls_private', 'pakkelabels_shipping_postnord_private', 'pakkelabels_shipping_gls', 'pakkelabels_shipping_pdk', 'flat_rate:15', 'flat_rate:14' ], ], 'half pallet' => [ 169 => [ 'pakkelabels_shipping_gls_private', 'pakkelabels_shipping_postnord_private', 'pakkelabels_shipping_gls', 'pakkelabels_shipping_pdk', 'flat_rate:15' ], ], 'quarter pallet' => [ 211 => [ 'pakkelabels_shipping_gls_private', 'pakkelabels_shipping_postnord_private', 'pakkelabels_shipping_gls', 'pakkelabels_shipping_pdk' ], ] ], 'not exists' => [ 'full pallet' => [ 171 => [ 'flat_rate:12' ] ], 'half pallet' => [ 169 => [ 'flat_rate:14' ] ], 'quarter pallet' => [ 211 => [ 'flat_rate:15' ] ] ] ]; $class_ids[170] = ''; $class_ids[171] = ''; $available_shipping_methods['flat_rate:12'] = 'something'; $available_shipping_methods['flat_rate:14'] = 'somethingelse'; foreach ($method_filters as $filter_type => $pallet_filters) { // iterate exists/not exists level foreach ($pallet_filters as $pallet_type => $shipping_methods) { // iterate different pallets level if ($filter_type == 'exists') { $qualifiers = array_intersect_key($shipping_methods, $class_ids); } else { $qualifiers = array_diff_key($shipping_methods, $class_ids); } foreach ($qualifiers as $class_id => $method_names) { // only iterate if there are qualifying class ids foreach ($method_names as $method_name) { echo "unsetting $method_name\n"; unset($available_shipping_methods[$method_name]); } } } } var_export($available_shipping_methods);

preferences:
67.1 ms | 402 KiB | 5 Q