关于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 ; } |
作者:viticm
出处: http://www.cnblogs.com/lianyue/
标签:
php 载入ini文件
, php数组散列
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现