Home  >  Article  >  Backend Development  >  PHP数组转换

PHP数组转换

WBOY
WBOYOriginal
2016-06-06 20:37:021042browse

源数组:

<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>
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn