这是其中一天。。尝试了很多可能的解决方案,现在开始兜圈子了。希望有人能帮我。
我检索了一个巨大的json文件,需要删除带有某个键的所有节点(在每个级别上)。
我确实有一个类似的数组($array):
Array
(
[result] => Array
(
[0] => Array
(
[title] => my title 1
[subtitle] => my subtitle 1
[pagetree] => Array
(
[0] => Array
(
[uid] => 1016
)
[1] => Array
(
[uid] => 1017
)
[2] => Array
(
[uid] => 4512
)
[3] => Array
(
[uid] => 1018
)
[4] => Array
(
[uid] => 1019
)
[5] => Array
(
[uid] => 1024
)
)
[languageVersions] => Array
(
[de] => Array
(
[pid] => 1016
[title] => Das ist der Titel in DE
[subtitle] => german subtitle
[pagetree] => Array
(
[0] => Array
(
[uid] => 1016
)
[1] => Array
(
[uid] => 1017
)
[2] => Array
(
[uid] => 4512
)
[3] => Array
(
[uid] => 1018
)
[4] => Array
(
[uid] => 1019
)
[5] => Array
(
[uid] => 1024
)
)
[tstamp] => 1410339721
[package] => 1016/course_de
)
[jp] => Array
(
[pid] => 1016
[language_title] => Japanese
[title] => This JAPANESE TITLE
[subtitle] => Japanese SAub Title
[pagetree] => Array
(
[0] => Array
(
[uid] => 1016
)
[1] => Array
(
[uid] => 1017
)
[2] => Array
(
[uid] => 4512
)
[3] => Array
(
[uid] => 1018
)
[4] => Array
(
[uid] => 1019
)
[5] => Array
(
[uid] => 1024
)
)
[tstamp] => 1405960286
[package] => 1016/course_jp
)
[cn] => Array
(
[language_id] => 19
[pid] => 1016
[language_title] => Chinese (simplified)
[title] => Title Chinese
[subtitle] =>
[pagetree] => Array
(
[0] => Array
(
[uid] => 1016
)
[1] => Array
(
[uid] => 1017
)
[2] => Array
(
[uid] => 4512
)
[3] => Array
(
[uid] => 1018
)
[4] => Array
(
[uid] => 1019
)
[5] => Array
(
[uid] => 1024
)
)
[tstamp] => 1404520858
[package] => 1016/course_cn
)
[th] => Array
(
[language_id] => 29
[pid] => 1016
[language_short] => th
[language_title] => Thai
[title] => thai title
[subtitle] =>
[tstamp] => 1414136060
[package] => 1016/course_th
)
)
)
)
[1] => Array
(
[uid] => 1657
[pid] => 2
[language_id] => 0
[language_short] => default
[language_title] => English
[title] => Dive Guide
[subtitle] =>
[pagetree] => Array
(
[0] => Array
(
....
我想用关键字〔pagetree〕删除所有级别上的所有节点。
我在StackOverflow中找到了几个关于这个问题的帖子,但无法让它们正常工作(根据关键字从多维数组中删除元素,递归搜索并在数组中删除?)
我的方法是:
function removeKeyFromArray(&$array, $key_to_remove)
{
foreach ($array as $key => &$value)
{
if (is_array($value))
{
removeKeyFromArray($value, $key_to_remove);
}
elseif ($key==$key_to_remove)
{
unset($array[$key]);
}
}
}
$json = file_get_contents('http://url.with.json.file');
$data = json_decode($json);
$array = objectToArray($data);
removeKeyFromArray($array, 'pagetree');
echo "<pre>";
print_r($array);
echo "</pre>";
清理之后,数组应该看起来像;
Array
(
[result] => Array
(
[0] => Array
(
[title] => my title 1
[subtitle] => my subtitle 1
[languageVersions] => Array
(
[de] => Array
(
[pid] => 1016
[title] => Das ist der Titel in DE
[subtitle] => german subtitle
[tstamp] => 1410339721
[package] => 1016/course_de
)
[jp] => Array
(
[pid] => 1016
[language_title] => Japanese
[title] => This JAPANESE TITLE
[subtitle] => Japanese SAub Title
[tstamp] => 1405960286
[package] => 1016/course_jp
)
[cn] => Array
(
[language_id] => 19
[pid] => 1016
[language_title] => Chinese (simplified)
[title] => Title Chinese
[subtitle] =>
[tstamp] => 1404520858
[package] => 1016/course_cn
)
[th] => Array
(
[language_id] => 29
[pid] => 1016
[language_short] => th
[language_title] => Thai
[title] => thai title
[subtitle] =>
[tstamp] => 1414136060
[package] => 1016/course_th
)
)
)
)
[1] => Array
(
[uid] => 1657
[pid] => 2
[language_id] => 0
[language_short] => default
[language_title] => English
[title] => Dive Guide
[subtitle] =>
....
谢谢你的帮助。
试试这个:
function removeKeyFromArray(&$array, $key_to_remove)
{
foreach ($array as $key => &$value)
{
if ($key==$key_to_remove)
{
unset($array[$key]);
}
elseif (is_array($value))
{
removeKeyFromArray($value, $key_to_remove);
}
}
}
这样做永远找不到要删除的键,因为它们也是数组,所以会一直遍历if/else语句的第一部分,因此永远不会被取消设置。