Home > Article > Backend Development > PHP数组转换
源数组:
<code>$attributes = array( 'Users' => array( 'Name' => 'Name', ), 'Address' => 'Address', 'Tags' => array( 0 => array( 'Key' => 'Key', 'Value' => 'Value', ), 1 => array( 'Key' => 'Key', ), 2 => array( ) ), ); </code>
希望转换为如下数组:
<code>$result = array( 'Users_Name' => 'Name', 'Address' => 'Address', 'Tags_0_Key' => 'Key', 'Tags_0_Value' => 'Value', 'Tags_1_Key' => 'Key', // 'Tags_2' => '', ); </code>
递归方式尝试了半天,依然没有解决,如何转换呢?
源数组:
<code>$attributes = array( 'Users' => array( 'Name' => 'Name', ), 'Address' => 'Address', 'Tags' => array( 0 => array( 'Key' => 'Key', 'Value' => 'Value', ), 1 => array( 'Key' => 'Key', ), 2 => array( ) ), ); </code>
希望转换为如下数组:
<code>$result = array( 'Users_Name' => 'Name', 'Address' => 'Address', 'Tags_0_Key' => 'Key', 'Tags_0_Value' => 'Value', 'Tags_1_Key' => 'Key', // 'Tags_2' => '', ); </code>
递归方式尝试了半天,依然没有解决,如何转换呢?
如果那个空数组也要转换的话自己再分个类就好啦。
<code><?php //http://3v4l.org/mdWQX function transfer( $arr, $prefix=array(), $glue="_" ) { $res = array(); foreach( $arr as $key => $val ) { $key = array_merge( $prefix, array($key) ); if( is_array($val) ) $res = array_merge( $res, transfer( $val, $key, $glue ) ); else $res[ implode($glue, $key) ] = $val; } return $res; } $attributes = array( 'Users' => array( 'Name' => 'Name', ), 'Address' => 'Address', 'Tags' => array( 0 => array( 'Key' => 'Key', 'Value' => 'Value', ), 1 => array( 'Key' => 'Key', ), 2 => array( ) ), ); var_dump( transfer( $attributes ) ); </code>
<code>function t($parent_key, $parent_array, &$data) { foreach ($parent_array as $k => $v) { if (is_array($v)) { t("${parent_key}_${k}", $v, $data); } else { $data[trim("${parent_key}_${k}", '_')] = $v; } } } $data = array(); $attributes = array( 'Users' => array( 'Name' => 'Name', ), 'Address' => 'Address', 'Tags' => array( 0 => array( 'Key' => 'Key', 'Value' => 'Value', ), 1 => array( 'Key' => 'Key', ), 2 => array( ) ), ); t('', $attributes, $data); print_r($data); </code>
<code>function deal($array, $prekey){ $res = array(); foreach ($array as $key => $val) { if(is_array($val)){ $tmp = deal($val, $prekey.$key."_"); $res = array_merge($tmp, $res); }else{ $res[$prekey.$key] = $val; } } return $res; } print_r(deal($attributes, '')); </code>