我有一个保持所有配置的GLOBAL数组,它看起来像这样:
$_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 [&#39; b&#39;] [&#39; c&#39;]你会写Config::delete('b/c');
- 但是:它会删除整个B.它只能删除下进行。
有什么想法吗?
答案 0 :(得分:1)
这是你可以做的,假设数组有2级数据。
$_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()
进行取消设置之前检查密钥是否存在
答案 1 :(得分:1)
$_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或者使用recursiv函数来深入数组答案 2 :(得分:0)
你想使用唯一索引(如主要ID)删除特定数组吗?我会使用for循环查找该特定索引然后删除该数组...例如删除索引= 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
}
}
}