天天看点

数组转变成键值一维数组

在保险产品投保流程的开发过程中,遇到了如下问题:

1,投保模板的结构是多维的结构;

2,投保模板给出的字段是A(特殊字段),但是在投保时传递到后台的字段要求是B。

问题思考:

step1

要对特殊字段做映射关系;

列如:
'ADDRESS_3_province' => 'province', //省份
'ADDRESS_3_city' => 'city', //城市
'ADDRESS_3_district' => 'district', //区域           

step2

数组转变成键值一维数组

/**
 * 数组转变成键值一维数组
 * 
 * @param array $arr 数组
 * @param string $arr_key 数组键
 * @param string $split 分割符
 * @param array $linear_arr 键值一维数组
 * 
 * @return array
 */
function array_to_linear_array($arr = array(), $arr_key = "", $split = "_", &$linear_arr = array()) {
    foreach ($arr as $key => $val) {
        if (is_array($val)) {
            $str_key = "";
            if ($arr_key) {
                $str_key = $arr_key . $split;
            }
            $str_key .= $key;
            array_to_linear_array($val, $str_key, $split, $linear_arr);
        } else {
            if ($arr_key) {
                $linear_arr[$arr_key . $split . $key] = $val;
            } else {
                $linear_arr[$key] = $val;
            }
        }
    }
}      

代码结构及结果

$arr = array(
    'NAME' => 'bing',
    'CERTIFICATENO' => '19880102167548',
    'PHONE' => array(
        '2' => '13714375950',
        '3' => '0755-2686590'
    ),
    'ADDRESS' => array(
        '3' => array(
            'province' => '110000',
            'city' => '110100',
            'district' => '110101'
        )
    ),
    'EMAIL' => '[email protected]'
);
$linear_arr = array();
array_to_linear_array($arr, "", "_", $linear_arr);
print_r($linear_arr);           

 打印结果:

Array
(
    [NAME] => bing
    [CERTIFICATENO] => 19880102167548
    [PHONE_2] => 13714375950
    [PHONE_3] => 0755-2686590
    [ADDRESS_3_province] => 110000
    [ADDRESS_3_city] => 110100
    [ADDRESS_3_district] => 110101
    [EMAIL] => [email protected]
)