【问题标题】:Unset many array取消设置许多数组
【发布时间】:2011-12-14 09:50:43
【问题描述】:

我的代码需要帮助。从下面的数组中取消设置 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); 多次?提前致谢。

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

【问题讨论】:

    标签: php arrays unset


    【解决方案1】:

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

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

    编辑:在这种情况下,您能做的最好的事情就是使用 for 或 foreach。

    【讨论】:

    • 抱歉,我应该提供更多信息。如何禁用 3 个阵列中的 2 个?例如只禁用 ['xfer'] 和 ['active']?
    【解决方案2】:

    如果您打算经常使用它,您可以创建一个函数来帮助简化它:

    <?php
    function unset_array($keys, &$arr) {
        foreach($keys as $key) {
            unset($arr[$key]);
        }
    }
    
    unset_array(array('xfer', 'active'), $arr['tabs']['dns_soa']);
    ?>
    

    【讨论】:

    • 嘿,谢谢,我会检查一下。感谢您尝试帮助我:)
    【解决方案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]);
    }
    

    【讨论】:

    • 抱歉,我应该提供更多信息。如何禁用 3 个阵列中的 2 个?例如只禁用 ['xfer'] 和 ['active']?
    • aahh foreach。我已经在课堂上学到了这一点。非常感谢先生/女士。你可以节省时间:)
    猜你喜欢
    • 2018-10-27
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 2011-11-07
    • 1970-01-01
    • 2015-09-30
    • 2012-08-11
    相关资源
    最近更新 更多