如何从关联数组PHP中删除所有特定键

问题描述 投票:0回答:2

我必须从关联数组(如下面的数组)中取消设置所有“优先级”键和值。找不到解决方案。

您认为从整个数组中删除特定键值对的最佳方法是什么?

$countries = array(
    'AE' => array(
        'postcode' => array(
          'required' => false,
          'hidden'   => true,
          'priority' => 40,
        ),
        'city' => array(
            'priority' => 50,
        ),
    ),
    'AF' => array(
        'state' => array(
            'priority' => 65,
        ),
    ),
    'AO' => array(
        'postcode' => array(
            'required' => false,
            'hidden'   => true,
        ),
        'state'    => array(
            'label' => __( 'Province', 'woocommerce' ),
            'priority' => 70,
        ),
    ),
    // + another arrays
);
php arrays multidimensional-array associative array-unset
2个回答
0
投票
<?php
$countries = array(
    'AE' => array(
        'postcode' => array(
          'required' => false,
          'hidden'   => true,
        ),
        'state'    => array(
            'priority' => 50,
        ),
    ),
    'AF' => array(
        'state' => array(
            'priority' => 65,
        ),
    ),
    'AO' => array(
        'postcode' => array(
            'required' => false,
            'hidden'   => true,
        ),
        'state'    => array(
            'label' => ['Province', 'woocommerce'],
            'priority' => 70,
        ),
    ),
    // + another arrays
);

foreach($countries as &$country) {
    if(array_key_exists('state', $country)
        && array_key_exists('priority', $country['state'])) {
        unset($country['state']['priority']);
    }
}
var_dump($countries);

0
投票
<?php
$countries = array(
    'AE' => array(
        'postcode' => array(
          'required' => false,
          'hidden'   => true,
        ),
        'state'    => array(
            'priority' => 50,
        ),
    ),
    'AF' => array(
        'state' => array(
            'priority' => 65,
        ),
    ),
    'AO' => array(
        'postcode' => array(
            'required' => false,
            'hidden'   => true,
        ),
        'state'    => array(
            'label' => ['Province', 'woocommerce'],
            'priority' => 70,
        ),
    ),
    // + another arrays
);

function unset_recursive(&$array, $key) {
    unset($array[$key]);
    foreach ($array as &$value) {
        if (is_array($value)) {
            unset_recursive($value, $key);
        }
    }
}

unset_recursive($countries, 'priority');
var_dump($countries);
© www.soinside.com 2019 - 2024. All rights reserved.