• 【php】php实现数组分块


    有时候需要将一个大数组按一定大小分块,那么可以实现这个功能,代码如下:

    /**
     * @param array $arr
     * @param int $size <p>
     * @param bool $preserve_keys [optional] <p>
     * @author  <1123258953@qq.com>
     */
    function _array_chunk($arr,$size,$preserve_keys=true){
        if(empty($arr)){
           return $arr;
        }
        $count = count($arr) % $size == 0 ? count($arr) / $size : ceil(count($arr) / $size);
    
        for ($i = 0; $i < $count; $i++) {array_chunk();
            //$index = $i * $size;
            if(!isset($chunks_arr[$i])){
                $chunks_arr[$i] = [];
            }
            $j=0;
            foreach ($arr as $k=>$v){
                if($j<$size){
                    if($preserve_keys){
                        $chunks_arr[$i][$k] = $v;
                    }else{
                        $chunks_arr[$i][] = $v;
                    }
                    unset($arr[$k]);
                }
                $j++;
            }
        }
        return $chunks_arr;
    }
    

     测试

    $arr = range(1, 15);
    print_r(_array_chunk($arr,6,1));

     输出

    Array
    (
        [0] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => 4
                [4] => 5
                [5] => 6
            )
    
        [1] => Array
            (
                [6] => 7
                [7] => 8
                [8] => 9
                [9] => 10
                [10] => 11
                [11] => 12
            )
    
        [2] => Array
            (
                [12] => 13
                [13] => 14
                [14] => 15
            )
    
    )
    

     其实php有内置的数组可以实现该功能 就是 array_chunk    地址:http://php.net/manual/zh/function.array-chunk.php

    手册也有该函数的实现,可以参考下

    if (!function_exists('array_chunk')) { 
        function array_chunk( $input, $size, $preserve_keys = false) { 
            @reset( $input ); 
             
            $i = $j = 0; 
    
            while( @list( $key, $value ) = @each( $input ) ) { 
                if( !( isset( $chunks[$i] ) ) ) { 
                   $chunks[$i] = array(); 
                } 
    
                if( count( $chunks[$i] ) < $size ) { 
                    if( $preserve_keys ) { 
                        $chunks[$i][$key] = $value; 
                        $j++; 
                    } else { 
                        $chunks[$i][] = $value; 
                    } 
                } else { 
                    $i++; 
    
                    if( $preserve_keys ) { 
                        $chunks[$i][$key] = $value; 
                        $j++; 
                    } else { 
                        $j = 0; 
                        $chunks[$i][$j] = $value; 
                    } 
                } 
            } 
    
            return $chunks; 
        } 
    } 
    
  • 相关阅读:
    在MVC中更新ModelFirst Entity Framework POCO实体外键的方法
    美国行照片集十四:洛杉矶拉斯维加斯之旅
    深入ASP.NET MVC之三:Controller的激活
    美国行照片集之十三:感恩节之旅
    深入ASP.NET MVC 之一:IIS到路由表
    博客样式改版
    关于如何用string保存二进制数据的问题
    XSI IPC机制的优缺点
    C,C++,java,python对比
    grunt requireJS 的基础配置
  • 原文地址:https://www.cnblogs.com/songgj/p/8435666.html
Copyright © 2020-2023  润新知