3v4l.org

run code in 300+ PHP versions simultaneously
<?php $arr = [array ( 'category' => array ( 'categoryId' => 34, 'categoryName' => 'Advertising', ), 'categoryTreeNodeLevel' => 2, 'childCategoryTreeNodes' => array ( 0 => array ( 'category' => array ( 'categoryId' => 35, 'categoryName' => 'Other Advertising', ), 'categoryTreeNodeLevel' => 3, 'leafCategoryTreeNode' => 1, 'parentCategoryTreeNodeHref' => 'someurl', ), 1 => array ( 'category' => array ( 'categoryId' => 36, 'categoryName' => 'Drinks', ), 'categoryTreeNodeLevel' => 3, 'childCategoryTreeNodes' => array ( 0 => array ( 'category' => array ( 'categoryId' => 13601, 'categoryName' => 'Coca Cola', ), 'categoryTreeNodeLevel' => 4, 'leafCategoryTreeNode' => 1, 'parentCategoryTreeNodeHref' => 'someurl', ), 1 => array ( 'category' => array ( 'categoryId' => 13613, 'categoryName' => 'Pepsi', ), 'categoryTreeNodeLevel' => 4, 'leafCategoryTreeNode' => 1, 'parentCategoryTreeNodeHref' => 'someurl', ), 2 => array ( 'category' => array ( 'categoryId' => 20189, 'categoryName' => 'Other Drinks Advertising', ), 'categoryTreeNodeLevel' => 4, 'leafCategoryTreeNode' => 1, 'parentCategoryTreeNodeHref' => 'someurl', ), ), 'parentCategoryTreeNodeHref' => 'someurl', ), 2 => array ( 'category' => array ( 'categoryId' => 804, 'categoryName' => 'Signs', ), 'categoryTreeNodeLevel' => 3, 'leafCategoryTreeNode' => 1, 'parentCategoryTreeNodeHref' => 'someurl', ), 3 => array ( 'category' => array ( 'categoryId' => 821, 'categoryName' => 'Distillery/Spirits', ), 'categoryTreeNodeLevel' => 3, 'leafCategoryTreeNode' => 1, 'parentCategoryTreeNodeHref' => 'someurl', ), 4 => array ( 'category' => array ( 'categoryId' => 1313, 'categoryName' => 'Transportation', ), 'categoryTreeNodeLevel' => 3, 'childCategoryTreeNodes' => array ( 0 => array ( 'category' => array ( 'categoryId' => 69513, 'categoryName' => 'Aeronautica', ), 'categoryTreeNodeLevel' => 4, 'leafCategoryTreeNode' => 1, 'parentCategoryTreeNodeHref' => 'someurl', ), 1 => array ( 'category' => array ( 'categoryId' => 69514, 'categoryName' => 'Petrol/Oil', ), 'categoryTreeNodeLevel' => 4, 'leafCategoryTreeNode' => 1, 'parentCategoryTreeNodeHref' => 'someurl', ), 2 => array ( 'category' => array ( 'categoryId' => 69515, 'categoryName' => 'Other Transportation Advert', ), 'categoryTreeNodeLevel' => 4, 'leafCategoryTreeNode' => 1, 'parentCategoryTreeNodeHref' => 'someurl', ), 3 => array ( 'category' => array ( 'categoryId' => 90648, 'categoryName' => 'Railway', ), 'categoryTreeNodeLevel' => 4, 'leafCategoryTreeNode' => 1, 'parentCategoryTreeNodeHref' => 'someurl', ), ), 'parentCategoryTreeNodeHref' => 'someurl', ), 5 => array ( 'category' => array ( 'categoryId' => 1525, 'categoryName' => 'Chemist', ), 'categoryTreeNodeLevel' => 3, 'leafCategoryTreeNode' => 1, 'parentCategoryTreeNodeHref' => 'someurl', ), ), )]; $data = flattenCategoryNodeTree($arr); var_dump($data); function flattenCategoryNodeTree($data, $flattened = [], $categoryName = []) { foreach($data as $node) { if(array_key_exists('childCategoryTreeNodes', $node)) { $categoryName[] = $node['category']['categoryName']; $flattened = flattenCategoryNodeTree($node['childCategoryTreeNodes'], $flattened, $categoryName); continue; } else { $flattened[$node['category']['categoryId']] = implode('::', array_merge($categoryName, [$node['category']['categoryName']])); } } return $flattened; }
Output for 7.1.25 - 7.1.33, 7.2.0 - 7.2.33, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.27, 8.2.0 - 8.2.17, 8.3.0 - 8.3.4
array(11) { [35]=> string(30) "Advertising::Other Advertising" [13601]=> string(30) "Advertising::Drinks::Coca Cola" [13613]=> string(26) "Advertising::Drinks::Pepsi" [20189]=> string(45) "Advertising::Drinks::Other Drinks Advertising" [804]=> string(26) "Advertising::Drinks::Signs" [821]=> string(39) "Advertising::Drinks::Distillery/Spirits" [69513]=> string(48) "Advertising::Drinks::Transportation::Aeronautica" [69514]=> string(47) "Advertising::Drinks::Transportation::Petrol/Oil" [69515]=> string(64) "Advertising::Drinks::Transportation::Other Transportation Advert" [90648]=> string(44) "Advertising::Drinks::Transportation::Railway" [1525]=> string(44) "Advertising::Drinks::Transportation::Chemist" }

preferences:
160.2 ms | 404 KiB | 179 Q