zoukankan      html  css  js  c++  java
  • 【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; 
        } 
    } 
    
  • 相关阅读:
    无限维
    黎曼流形
    why we need virtual key word
    TOJ 4119 Split Equally
    TOJ 4003 Next Permutation
    TOJ 4002 Palindrome Generator
    TOJ 2749 Absent Substrings
    TOJ 2641 Gene
    TOJ 2861 Octal Fractions
    TOJ 4394 Rebuild Road
  • 原文地址:https://www.cnblogs.com/songgj/p/8435666.html
Copyright © 2011-2022 走看看