php如何扁平化下面的数组?

felixjing 发布于 2016/09/15 21:03
阅读 718
收藏 0
PHP

 Array (
    [0] => Array (
        [社员] => 2
        [0] => level4
    )
    [1] => Array (
        [社员] => 2
        [0] => level4
        [1] => level4
    )
 )
 Array (
    [0] => Array (
        [小组长] => 2
        [0] => level3
    )
    [1] => Array (
        [小组长] => 2
        [0] => level3
        [1] => level3
        [2] => level3
    )
 )

请问如何将上面的数组最后扁平化为下面的数组

Array (
      [社员] => 2
      [小组长] => 2
      [0] => level4
      [1] => level4
      [2] => level3
      [3] => level3
      [4] => level3  
  )





加载中
1
大止刀口
大止刀口
function flatten($arr){
    $result= [];
    foreach($arr as $k => $v){
        if(is_array($v){
            $result = array_merge($result,flatten($v));
        }else if(is_numeric($k)){
            $result[] = $v;
        }else{
            $result[$k] = $v;
        }
    }
    return $result;
}

现在OSC都不回答这中基本问题了,你问2天了一个回的都没有。
现打的,没调试。你看个大概吧。
具体的想法就是遍历,在遇到数组的时候拆分; 键是数字就追加,不是就保留键值对。 在处理数组的时候用到了递归,主要处理数组嵌套。

0
r
rocet
$inputa = [
    [
        '社员' => 2,
        'level4'
    ],
    [
        '社员' => 2,
        'level4',
        'level4'
    ]
];
$inputb = [
    [
        '小组长' => 2,
        'level3',
    ],
    [
        '小组长' => 2,
        'level3',
        'level3',
        'level3'
    ]
];
$input = array_merge_recursive($inputa,$inputb);
$output = [];
array_walk_recursive($input, function($v,$k) use(&$output){
	if( isset( $output[$k] ) && $output[$k] !== $v ) {
		$output[] = $v;
	} else {
		$output[$k] = $v;
	}
});
ksort($output,SORT_NUMERIC);
var_dump( $output );
返回顶部
顶部