【问题标题】:How to remove all specific keys from an associative array PHP [duplicate]如何从关联数组PHP中删除所有特定键[重复]
【发布时间】:2020-05-26 20:55:58
【问题描述】:

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

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

$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
);

编辑

我找到的解决方案:

foreach( $countries as $country => $fields ) {
    foreach( $fields as $field => $options ) {
        if ( isset( $options['priority'] ) ) {
            unset( $countries[$country][$field]['priority'] );
        }
    }
}

但我仍然想知道是否还有其他更好的选择,编写代码更少,可能还有一些预定义的功能。

【问题讨论】:

  • 使用循环并取消设置。到目前为止,您尝试过什么?

标签: php arrays multidimensional-array associative array-unset


【解决方案1】:

请试试这个,这段代码可以搜索2的深度。

<?php
$countries = array(
    'AE' => array(
        'postcode' => array(
          'required' => false,
          'hidden'   => true,
        'priority' => 50,
        ),
        '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
);

$lookKey = 'priority';
foreach($countries as $key => $country) {

    if(array_key_exists($lookKey, $country)){
        //echo "\n $key - $lookKey";
        unset($countries[$key][$lookKey]);
    }else{
        foreach($country as $subKey => $ar){    
            if(array_key_exists($lookKey, $ar)){
                //echo "\n $key - $subKey - $lookKey";
                unset($countries[$key][$subKey][$lookKey]);
            }
        }
    }


}

print_r($countries);

希望对您有所帮助。

【讨论】:

    【解决方案2】:
    <?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);
    

    【讨论】:

      【解决方案3】:
      <?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);
      

      【讨论】:

      • 感谢您的回复!但是可以在更多数组中找到“优先级”键。不仅在“状态”数组中。
      猜你喜欢
      • 2011-04-15
      • 1970-01-01
      • 1970-01-01
      • 2017-11-21
      • 2019-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多