arrays.php 1.5 KB
<?php
class CACIE_Arrays {

	/**
	 * Private constructor to prevent instantiation
	 *
	 * @since 1.0
	 */
	private function __construct() {}

	/**
	 * Indents any object as long as it has a unique id and that of its parent.
	 *
	 * @since 1.0
	 *
	 * @param type $array
	 * @param type $parentId
	 * @param type $parentKey
	 * @param type $selfKey
	 * @param type $childrenKey
	 * @return array Indented Array
	 */
	static public function array_nest( $array, $parentId = 0, $parentKey = 'post_parent', $selfKey = 'ID', $childrenKey = 'children' ) {
		$indent = array();

        // clean counter
        $i = 0;

		foreach ( $array as $v ) {
			if ( $v->$parentKey == $parentId ) {
				$indent[$i] = $v;
				$indent[$i]->$childrenKey = CACIE_Arrays::array_nest( $array, $v->$selfKey, $parentKey, $selfKey, $childrenKey );

                $i++;
			}
		}

		return $indent;
	}

	public static function convert_nesting_to_indentation( $nested_array, $indent_key, $children_key = 'children', $depth = 0 )	{
		$i = 0;

		$indented_array = array();

		foreach ( $nested_array as $index => $value ) {
			if ( isset( $value->{$children_key} ) ) {
				$newpart = CACIE_Arrays::convert_nesting_to_indentation( $value->{$children_key}, $indent_key, $children_key, $depth + 1 );
				unset( $value->{$children_key} );
				$value->{$indent_key} = str_repeat( '-', $depth ) . $value->{$indent_key};
				$indented_array[] = $value;
				$indented_array = array_merge( $indented_array, $newpart );
			}
			else {
				$indented_array[] = $value;
			}
		}

		return $indented_array;
	}
}