search

Home  >  Q&A  >  body text

PHP数组转换

源数组:

$attributes = array(
    'Users' => array(
        'Name' => 'Name',
    ),
    'Address' => 'Address',
    'Tags' => array(
        0 => array(
            'Key' => 'Key',
            'Value' => 'Value',
        ),
        1 => array(
            'Key' => 'Key',
        ),
        2 => array(
        )
    ),
);

希望转换为如下数组:

$result = array(
    'Users_Name' => 'Name',
    'Address' => 'Address',
    'Tags_0_Key' => 'Key',
    'Tags_0_Value' => 'Value',
    'Tags_1_Key' => 'Key',
    // 'Tags_2' => '',
);

递归方式尝试了半天,依然没有解决,如何转换呢?

巴扎黑巴扎黑2790 days ago730

reply all(3)I'll reply

  • 迷茫

    迷茫2017-04-10 15:28:31

    如果那个空数组也要转换的话自己再分个类就好啦。

    <?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 ) );
    

    reply
    0
  • 迷茫

    迷茫2017-04-10 15:28:31

    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);
    

    reply
    0
  • 怪我咯

    怪我咯2017-04-10 15:28:31

    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, ''));
    

    reply
    0
  • Cancelreply