All pastes #429776 Raw Edit

Miscellany

public text v1 · immutable
·published 2007-04-08 13:07 UTC
rendered paste body
<?php

/**
 * Make sure the function is not already defined.
 *
 */
if ( ! function_exists('array_to_php') )
{
	/**
	 * Builds the php code (keyed, escaped and nested) for a php array for caching or data storage
	 *
	 * @param	array	$a			The array of data to translate
	 * @param	bool	$self_call	Is this function being called by itself?
	 * @param	integer	$nest_level	The current nesting level of the function
	 *
	 * @author	Dean Newman <webmaster@auscoder.com>
	 * @example	echo '<pre>' . array_to_php( array(1 => array(1,2,3),2,3,4) ) . '</pre>';
	 * @return	string	The final result (php code)
	 */
	function array_to_php ( $a, $self_call = false, $nest_level = 1 )
	{
		// Set initial string
		$str = 'array(';
		
		// Declare key counter
		$i = 0;
		
		// Reset to start of array
		reset ( $a );
		
		// Increase nesting level on self-call
		if ( $self_call )
		{
			$nest_level++;
		}
	
		// Assign the tabs for each level in
		$tab = '';
		for ( $i = 0 ; $i < $nest_level ; $i++ )
		{
			$tab .= "\t";
		}
	
		// Loop though the array building php code
		$i = 0;
		while ( list ( $key, $value ) = @each ( $a ) )
		{
			// Check if the value is an array
			if ( is_array ( $value ) )
			{
				// The value is an array, do a self-call
				$str .=  "\n$tab'$key' => " . array_to_php($value, true, $nest_level);
			}
			else
			{
				// The value is not an array, do escaping
				$key = str_replace('\\', '\\\\', $key);
				$key = str_replace('\'', '\\\'', $key);
				$value = str_replace('\\', '\\\\', $value);
				$value = str_replace('\'', '\\\'', $value);
				
				// Generate the code
				$str .= "\n$tab'$key' => '$value'";
			}
			
			// Seperator
			if ( $i < (sizeof($a) - 1) )
			{
				$str .= ',';
			}
			
			// Increase counter
			$i++;
		}
	
		// Ending bracket for self-call
		if ( $self_call )
		{
			// 1 tab must be removed for clean code
			$s_tab = substr ( $tab, 0, ( strlen ( $tab ) - 1 ) );
			
			// Create array end bracket
			$str .= "\n$s_tab)";
		}
		else
		{
			// End array as normal
			$str .= "\n)";
		}
		
		// Return the generated php code
		return $str;
	}
}

?>