Last active
November 15, 2021 03:13
-
-
Save krusynth/6525369 to your computer and use it in GitHub Desktop.
Quick and easy way to translate flat arrays into nested arrays in PHP.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Wrapper to get terms in a nested fashion. | |
* This gets a little complicated. Basically, we're creating a placeholder in | |
* $children to hold the child terms of each parent term. Then we create a | |
* reference to that element in the parent term. So nesting happens via magic. | |
*/ | |
public function get_terms_nested($args) | |
{ | |
$temp_terms = $this->get_terms($args); | |
$terms = array(); | |
$children = array(); | |
foreach($temp_terms as $term) | |
{ | |
// Create a placeholder for the object's children. | |
if(!isset($children[$term['id']])) | |
{ | |
$children[$term['id']] = array(); | |
} | |
// Create a link to those children. | |
$term['children'] = &$children[$term['id']]; | |
if (!strlen($term['parent_id'])) | |
{ | |
$terms[] = $term; | |
} | |
else | |
{ | |
// Create a placeholder for the parent. | |
if(!isset($children[$term['parent_id']])) | |
{ | |
$children[$term['parent_id']] = array(); | |
} | |
// Add this object to the parent, even if it doesn't exist yet. | |
$children[$term['parent_id']][] = $term; | |
} | |
} | |
return $terms; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment