zoukankan      html  css  js  c++  java
  • 关于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;
    }
    

      

  • 相关阅读:
    qt 计时器自动刷新图片
    qt读取文本
    QLable 显示图片
    QButtonGroup 的使用
    Qt乱码的问题
    wpf 依赖强制回调
    实现Button的动态响应
    C# 闭包对像
    2020新年目标
    捕获、冒泡与阻止事件传播
  • 原文地址:https://www.cnblogs.com/lianyue/p/3035563.html
Copyright © 2011-2022 走看看