Created
          January 4, 2012 09:49 
        
      - 
      
- 
        Save phawk/1559358 to your computer and use it in GitHub Desktop. 
    php recursive closure
  
        
  
    
      This file contains hidden or 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
    
  
  
    
  | public function save() | |
| { | |
| // | |
| // Find the root ID of the category to make selecting much easier | |
| // | |
| // Get all categories | |
| $all_categories = $this->all_categories(); | |
| $parent_id = $this->get_parent_id(); | |
| // A recursive closure to go up all the levels to root category and get its ID | |
| // We need to pass this closure to itself by reference and pass the array of all categories by reference | |
| $find_root_id = function ($parent_id) use (&$find_root_id, &$all_categories) { | |
| $parent_category = $all_categories[$parent_id]; // Get the parent category from the ID | |
| $id = $parent_category->get_id(); // Get the ID of the parent | |
| $parent_id = $parent_category->get_parent_id(); // Get the parents parent ID | |
| if ($parent_id == null) | |
| { | |
| // If parent ID is null we need to return its ID as it is the root category | |
| return $id; | |
| } | |
| else | |
| { | |
| // If parents ID is not null, we call this function again recursively | |
| return $find_root_id($parent_id); | |
| } | |
| }; | |
| // Set the root ID of the object to the one found by the closure | |
| $this->set_root_id($find_root_id($parent_id)); | |
| parent::save(); | |
| } | 
  
    Sign up for free
    to join this conversation on GitHub.
    Already have an account?
    Sign in to comment