按KEY名称删除多维数组中每个级别上的所有节点


removing all Nodes on every level in multidimensional Array by KEY Name

这是其中一天。。尝试了很多可能的解决方案,现在开始兜圈子了。希望有人能帮我。

我检索了一个巨大的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语句的第一部分,因此永远不会被取消设置。