开发者社区> 问答> 正文

请教各位php组合生成一个特殊数组的问题

两个原数组screenshot
需要生成的数组screenshot
如何生成的?

展开
收起
落地花开啦 2016-06-13 16:07:35 1942 0
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    就是大数组里面的第一个小数组永远是最长的 ... 如果在这个数组里有 false 值则补全其他为空白 ...
    写了段示例代码如下

    <?php
    /* your array puts here ... primary key must be the first entry ... */
    $arr = [
        'id'    =>  [ '1', false, '3', '4' ],
        'name'  =>  [ 'zhang', 'li', 'du' ]
    ];
    
    /* get all key names ... */
    $keys = array_keys( $arr );
    
    /* use a different way to solve this ... */
    var_export( array_reduce( $arr, 
        function( & $result, $current ) use ( & $keys ) {
    
        /* get current key name ... */
        $key = array_shift( $keys );
    
        /* first run ..? */
        if ( ! isset( $result ) )
    
            /* initialize a new array with primary key... */
            $result = array_map( function( $value ) use ( $key ) {
    
                /* just packing value as an array ... */
                return [ $key => $value ];
    
            /* value based on $current ... known as first entry of $arr ... */
            }, $current );
    
        /* when the array is built ... add new keys into it ... */
        else foreach ( $result as $num => & $value )
    
            /* leave blank when primary key is false or entry is empty ... */
            $value[$key] = ( false !== current( $value ) ) ?
                array_shift( $current ) ?: '' : '';
    
        /* send the new array back ... */
        return $result;
    
    } ) );

    原理就是根据原数组里面的第一个小数组建立主键 ... 然后根据主键把所有元素拼合在一起 ...

    2019-07-17 19:36:19
    赞同 展开评论 打赏
问答分类:
PHP
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
阿里云栖开发者沙龙PHP技术专场-直面PHP微服务架构挑战-高驰涛 立即下载
PHP安全开发:从白帽角度做安全 立即下载
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载