Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
firepot
/
themes
/
momota
/
lib
/
colibriwp
/
src
/
Core
:
Tree.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php namespace ColibriWP\Theme\Core; class Tree { const SEPARATOR = '.'; private $data; public function __construct( $data = array() ) { $this->data = $data; } public function walkFirstLevel( $callback ) { $this->walkElementsAt( '', $callback ); } public function walkElementsAt( $path, $callback ) { $data = $this->getData(); if ( ! empty( $path ) ) { $data = $this->findAt( $path, array() ); } if ( is_array( $data ) ) { foreach ( $data as $key => $item ) { call_user_func( $callback, $key, $item ); } } } /** * @return array */ public function getData() { return $this->data; } /** * @param array $data * * @return Tree */ public function setData( $data ) { $this->data = $data; return $this; } public function findAt( $path, $default = null ) { $path_parts = explode( self::SEPARATOR, $path ); $result = $this->data; if ( $path === '' ) { return $result; } while ( $path_parts ) { $part = array_shift( $path_parts ); if ( $this->entityHasKey( $result, $part ) ) { if ( is_array( $result ) ) { $result = $result[ $part ]; } else { $result = $result->$part; } } else { $result = $default; break; } } return $result; } /** * @param $entity * @param $key * * @return bool */ private function entityHasKey( $entity, $key ) { if ( is_array( $entity ) && array_key_exists( $key, $entity ) ) { return true; } if ( is_object( $entity ) && property_exists( $entity, $key ) ) { return true; } return false; } }