使用函数/方法从全局数组中删除/取消设置


Delete/unset from a global array using a function / method

我有一个全局数组,保持所有的配置,它看起来像这样:

$_SOME_ARRAY = array(
                'some_setting' => array(
                                    'some_value' => '1',
                                    'other' => 'value'
                                ),  
                'something_else' => 1,
            );

如何从这个数组中删除键,使用一些函数:

deleteFromArray('some_setting/other')

我试过不同的东西,但似乎找不到一种方法,删除它没有手动调用unset($_SOME_ARRAY['some_setting']['other'])

编辑

我已经试过了。到目前为止,我看到的唯一解决方案是"重建"原始数组,通过循环遍历每个值并进行验证。进展:

        public static function delete($path) {
            global $_EDU_SETUP;
            $exploded_path = explode('/', $path);
            $newConfig = array();
            $delete = false;
            foreach($exploded_path as $bit) {
                if(!$delete) {
                    $loop = $_EDU_SETUP;
                } else {
                    $loop = $delete;
                }
                foreach($loop as $key => $value) {
                    if($key == $bit) {
                        echo 'found first: ' . $key . '<br />'; // debugging
                        if(!$delete) {
                            $delete = $_EDU_SETUP[$key];
                        } else {
                            $delete = $delete[$key];
                        }
                    } else {
                        $newConfig[$key] = $value;
                    }
                }
            }
            $_EDU_SETUP = $newConfig;
        }

数组可以像这样:

$array = array(
    'a' => array(
        'a',
        'b',
        'c'
    ),
    'b' => array(
        'a',
        'b',
        'c' => array(
            'a',
            'b',
            'c' => array(
                'a'
            ),
        ),
    )
);

和删除$array['b']['c']你会写Config::delete('b/c'); - BUT:它删除整个b。它只应该删除c。

任何想法?

假设数组有两层数据,您可以这样做。

 $_SOME_ARRAY = array(
                    'some_setting' => array(
                                        'some_value' => '1',
                                        'other' => 'value'
                                    ),  
                    'something_else' => 1,
                );
function deleteFromArray($param){
    global $_SOME_ARRAY ;
    $param_values = explode("/",$param);
    if(count($param_values) == 2 ){
        unset($_SOME_ARRAY[$param_values[0]][$param_values[1]]);
    }else{
        unset($_SOME_ARRAY[$param_values[0]]);
    }
}
deleteFromArray('some_setting/other');
print_r($_SOME_ARRAY);

您可以修改函数以添加更严格的规则,通过检查键是否存在,然后使用函数array_key_exists()

你觉得怎么样?

$_SESSION = $_SOME_ARRAY; // Btw it should be session from beginning...
function deleteFromArray($string)
{
    $array = explode("/",$sting);
    foreach($array as $arrA)
    {
        foreach($array as $arrB)
        {
            unset($_SESSION[$arrA][$arrB]);
        }
    }
}

现在可以删除多个条目,如

deleteFromArray('some_setting/some_value/a_other_value')

但是注意在dim2array…中使用dim1array的名称

当然你可以添加更多的foreach或者用它创建一个递归函数来深入数组

您想要使用唯一索引(如主id)删除特定数组吗?,我将使用for循环来查找特定的索引,然后删除该数组…G删除索引为1的数组,请检查上面的

foreach ($_SOME_ARRAY as $a => $key)//get all child arrays of '$_SOME_ARRAY '
{
   foreach($Key as $b => $key2)//get values of the child arrays
   {
        if($Key[0] == 1)// if the index at[0] equals 1
        {
            unset($arr[$a][$b]); //delete that array
        } 
   }
}