PHP数组转换

WBOY
풀어 주다: 2016-06-06 20:37:02
원래의
1043명이 탐색했습니다.

源数组:

<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>
로그인 후 복사
관련 라벨:
php
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿