关于php散列数组与格式化(zendframework中的ini读取方式)

  时间有限,记录一个列子 $Arr_Test[ 'test.mytest.youtest' ] = 1;

  散列结果将'test.mytest.youtest'散列为以test等为键的多维数组

  最终的效果是 $Arr_Test[ 'test' ][ 'mytest' ][ 'youtest' ] = 1;

  

/**

 * @desc 格式化数组

 * @param array $Arr_Format

 * @return array

 */

function formatArray( &$Arr_Format )

{

	foreach ( $Arr_Format as $key => $val )

	{

		$Arr_Key = explode( '.', $key );

        if ( is_array( $val ) ) formatArray( $Arr_Format[ $key ] );

		if( 1 < count( $Arr_Key ) )

        {

        	/** get the first key and pop it from key array **/

        	$cFirstKey = $Arr_Key[ 0 ];

        	array_shift( $Arr_Key );

        	$Arr_Tmp = hashArray( $Arr_Key, $val );

            unset( $Arr_Format[ $key ] );

            if( array_key_exists( $cFirstKey, $Arr_Format ) )

            {

            	$Arr_Format[ $cFirstKey ] = array_merge_recursive( $Arr_Format[ $cFirstKey ], $Arr_Tmp );

            }

            else 

            {

                $Arr_Format[ $cFirstKey ] = $Arr_Tmp;

            }

        	/** the first key must be array, and get the hash val to it **/

        }        

	}

	return $Arr_Format;

}



/**

 * @desc 散列数组(根据指定的键形成多维数组)

 * @param array $Arr_Hash hash key array

 * @param mixed $mLastVal the last key value

 * @return array

 */

function hashArray( $Arr_Hash, $mLastVal = false )

{

	if ( false === is_array( $Arr_Hash ) ) return array();

    $iCountArr = count( $Arr_Hash );

    for( $i = $iCountArr - 1; $i >= 0; $i-- )

    {

    	 if( $i == $iCountArr - 1 )

    	 {

    	 	$Arr_Tmp[ $Arr_Hash[ $i ] ] = false == $mLastVal ? array() : $mLastVal;

    	 }

    	 else 

    	 {

    	 	$Arr_Tmp[ $Arr_Hash[ $i ] ] = $Arr_Tmp;

    	 	array_shift( $Arr_Tmp );

    	 }

    }

    return $Arr_Tmp;

}

  

  使用formatArray( $Arr_Test );就能实现类型zend散列多维数组的方法。

  附,载入ini文件的方法

  

/**

 * @desc 载入ini文件

 * @param string $cFileName ini file name

 * @param bool $bToArray load mode( if to array, default to object )

 * @return mixed

 */

function loadIniFile( $cFileName, $bToArray = false )

{

	$Arr_IniFile = parse_ini_file( $cFileName, true );

	if( false !== $Arr_IniFile )

	{

		$Arr_IniFile = formatArray( $Arr_IniFile );

		if ( false === $bToArray ) $Arr_IniFile = arrayToObject( $Arr_IniFile );

	}

	return $Arr_IniFile;

}

/**

 * @desc 数组转换为对象

 * @param mixed $e

 * @return mixed

 */

function arrayToObject($e)

{

    if ( 'array' != gettype( $e ) ) return;

    foreach($e as $k=>$v)

    {

        if( gettype($v)=='array' || getType($v)=='object' )

            $e[$k]=(object)arrayToObject($v);

    }

    return (object)$e;

}



/**

 * @desc 对象转换为数组

 * @param mixed $e

 * @return mixed

 */

 function objectToArray($e){

    $e=(array)$e;

    foreach($e as $k=>$v)

    {

        if( gettype($v)=='resource' ) return;

        if( gettype($v)=='object' || gettype($v)=='array' )

            $e[$k]=(array)objectToArray($v);

    }

    return $e;

}

  

你可能感兴趣的:(framework)