【发布时间】:2014-05-12 10:54:37
【问题描述】:
我有一个保存所有配置的 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['b']['c'] 你可以写 Config::delete('b/c'); - 但是:它会删除整个 B。它应该只删除 C。
有什么想法吗?
【问题讨论】:
-
为什么不直接用explode 分割刺痛并在deleteFromArray 函数中使用参数?顺便说一句,你可以使用
$_SESSION:) -
这个数组是不是只有2个维度?
-
否 - 无限量
-
您可以发布一个包含您想要达到的结果的数组吗? :)