取消许多阵列

时间:2011-10-24 19:21:42

标签: php arrays unset

我的代码需要帮助。要从下面的数组中取消设置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我这样做。更新 - 实际上我在'fields'中有很多数组,但我只提供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);很多次?提前谢谢。

更新 - 道歉我应该提供更多信息。如何禁用3个数组中的2个?例如,只需禁用['xfer']和['active']?

3 个答案:

答案 0 :(得分:3)

你可以说:

// 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 :(得分:1)

如果要取消设置fields中的所有子数组,可以使用:

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

修改:在这种情况下,您可以做的最好是使用for或foreach。

答案 2 :(得分:1)

如果您打算经常使用它,您可以创建一个功能来帮助缩写它:

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

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