Сбросить множество массивов

#php #arrays #unset

#php #массивы #сбросить

Вопрос:

Мне нужна помощь с моим кодом. Чтобы сбросить массив xfer из массива ниже:

     if($_SESSION["s"]["user"]["typ"] == 'admin') {
    $form["tabs"]['dns_soa'] = array (
        'title'     => "DNS Zone",
        'width'     => 100,
        'template'  => "templates/dns_soa_edit.htm",
        'fields'    => array (
        ##################################
        # Begin Datatable fields
        ##################################

        'xfer' => array (
            'datatype'  => 'VARCHAR',
            'formtype'  => 'TEXT',
            'default'   => '',
            'value'     => '',
            'width'     => '30',
            'maxlength' => '255'
        ),

        'update_acl' => array (
            'datatype'  => 'VARCHAR',
            'formtype'  => 'TEXT',
            'default'   => '',
            'value'     => '',
            'width'     => '30',
            'maxlength' => '255'
        ),

        'active' => array (
            'datatype'  => 'VARCHAR',
            'formtype'  => 'CHECKBOX',
            'default'   => 'Y',
            'value'     => array(0 => 'N',1 => 'Y')
        ),
        ##################################
        # ENDE Datatable fields
        ##################################
        )
    );
    }
 

Я просто:

 unset($form["tabs"]['dns_soa']['fields']['xfer']);
 

и чтобы сбросить все 3, я делаю это. ОБНОВЛЕНИЕ — на самом деле у меня много массивов в «полях», но я просто предоставляю 3:

 unset($form["tabs"]['dns_soa']['fields']['xfer']);
unset($form["tabs"]['dns_soa']['fields']['update_acl']);
unset($form["tabs"]['dns_soa']['fields']['active']);
 

Могу ли я в любом случае сбросить множество массивов без
unset($form["tabs"]['dns_soa']['fields']array name here); многократного кодирования? Заранее спасибо.

ОБНОВЛЕНИЕ — Мои извинения, я должен предоставить больше информации. Как отключить 2 из 3 массивов? Например, просто отключить [‘xfer’] и [‘active’]?

Ответ №1:

Вы можете просто сказать:

 // to unset the parent "fields" array, which includes xfer, update_acl and active
unset($form["tabs"]['dns_soa']['fields']);
 

или

 // just to reset the fields array
$form["tabs"]['dns_soa']['fields'] = array();
 

Обновить:

Чтобы сбросить только определенное подмножество ключей, не повторяясь unset много раз в коде, я бы выполнил цикл:

 foreach (array('xfer', 'active') as $field) {
  unset($form["tabs"]['dns_soa']['fields'][$field]);
}
 

Комментарии:

1. Мои извинения, я должен предоставить больше информации. Как отключить 2 из 3 массивов? Например, просто отключить [‘xfer’] и [‘active’]?

2. aahh foreach. Я уже изучал это в своем классе. Большое вам спасибо, сэр / мадам. Вы экономите время 🙂

Ответ №2:

Если вы планируете часто использовать это, вы можете просто создать функцию, которая поможет сократить ее:

 <?php
function unset_array($keys, amp;$arr) {
    foreach($keys as $key) {
        unset($arr[$key]);
    }
}

unset_array(array('xfer', 'active'), $arr['tabs']['dns_soa']);
?>
 

Комментарии:

1. привет, спасибо, я это проверю. Спасибо, что пытались мне помочь 🙂

Ответ №3:

Если вы хотите сбросить все подмассивы fields , вы можете использовать:

 unset($form["tabs"]['dns_soa']['fields']);
 

Редактировать: в этом случае лучшее, что вы можете сделать, это использовать for или foreach .

Комментарии:

1. Мои извинения, я должен предоставить больше информации. Как отключить 2 из 3 массивов? Например, просто отключить [‘xfer’] и [‘active’]?