php将数组拆分为更小的偶数数组 [英] php split array into smaller even arrays

查看:36
本文介绍了php将数组拆分为更小的偶数数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个函数应该将我的数组拆分成更小的、均匀分布的数组,但是它似乎在复制我的数据.如果有人可以帮助我,那就太好了.

I have a function that is supposed to split my array into smaller, evenly distributed arrays, however it seems to be duplicating my data along the way. If anyone can help me out that'd be great.

这是原始数组:

Array
(
    [0] => stdClass Object
        (
            [bid] => 42
            [name] => Ray White Mordialloc
            [imageurl] => sp_raywhite.gif
            [clickurl] => http://www.raywhite.com/
        )

    [1] => stdClass Object
        (
            [bid] => 48
            [name] => Beachside Osteo
            [imageurl] => sp_beachside.gif
            [clickurl] => http://www.beachsideosteo.com.au/
        )

    [2] => stdClass Object
        (
            [bid] => 53
            [name] => Carmotive
            [imageurl] => sp_carmotive.jpg
            [clickurl] => http://www.carmotive.com.au/
        )

    [3] => stdClass Object
        (
            [bid] => 51
            [name] => Richmond and Bennison
            [imageurl] => sp_richmond.jpg
            [clickurl] => http://www.richbenn.com.au/
        )

    [4] => stdClass Object
        (
            [bid] => 50
            [name] => Letec
            [imageurl] => sp_letec.jpg
            [clickurl] => www.letec.biz
        )

    [5] => stdClass Object
        (
            [bid] => 39
            [name] => Main Street Mordialloc
            [imageurl] => main street cafe.jpg
            [clickurl] => 
        )

    [6] => stdClass Object
        (
            [bid] => 40
            [name] => Ripponlea Mitsubishi
            [imageurl] => sp_mitsubishi.gif
            [clickurl] => 
        )

    [7] => stdClass Object
        (
            [bid] => 34
            [name] => Adrianos Pizza & Pasta
            [imageurl] => sp_adrian.gif
            [clickurl] => 
        )

    [8] => stdClass Object
        (
            [bid] => 59
            [name] => Pure Sport
            [imageurl] => sp_psport.jpg
            [clickurl] => http://www.puresport.com.au/
        )

    [9] => stdClass Object
        (
            [bid] => 33
            [name] => Two Brothers
            [imageurl] => sp_2brothers.gif
            [clickurl] => http://www.2brothers.com.au/
        )

    [10] => stdClass Object
        (
            [bid] => 52
            [name] => Mordialloc Travel and Cruise
            [imageurl] => sp_morditravel.jpg
            [clickurl] => http://www.yellowpages.com.au/vic/mordialloc/mordialloc-travel-cruise-13492525-listing.html
        )

    [11] => stdClass Object
        (
            [bid] => 57
            [name] => Southern Suburbs Physiotherapy Centre
            [imageurl] => sp_sspc.jpg
            [clickurl] => http://www.sspc.com.au
        )

    [12] => stdClass Object
        (
            [bid] => 54
            [name] => PPM Builders
            [imageurl] => sp_ppm.jpg
            [clickurl] => http://www.hotfrog.com.au/Companies/P-P-M-Builders
        )

    [13] => stdClass Object
        (
            [bid] => 36
            [name] => Big River
            [imageurl] => sp_bigriver.gif
            [clickurl] => 
        )

    [14] => stdClass Object
        (
            [bid] => 35
            [name] => Bendigo Bank Parkdale / Mentone East
            [imageurl] => sp_bendigo.gif
            [clickurl] => http://www.bendigobank.com.au
        )

    [15] => stdClass Object
        (
            [bid] => 56
            [name] => Logical Services
            [imageurl] => sp_logical.jpg
            [clickurl] => 
        )

    [16] => stdClass Object
        (
            [bid] => 58
            [name] => Dicount Lollie Shop
            [imageurl] => new dls logo.jpg
            [clickurl] => 
        )

    [17] => stdClass Object
        (
            [bid] => 46
            [name] => Patterson Securities
            [imageurl] => cmyk patersons_withtag.jpg
            [clickurl] => 
        )

    [18] => stdClass Object
        (
            [bid] => 44
            [name] => Mordialloc Personal Trainers
            [imageurl] => sp_mordipt.gif
            [clickurl] => #
        )

    [19] => stdClass Object
        (
            [bid] => 37
            [name] => Mordialloc Cellar Door
            [imageurl] => sp_cellardoor.gif
            [clickurl] => 
        )

    [20] => stdClass Object
        (
            [bid] => 41
            [name] => Print House Graphics
            [imageurl] => sp_printhouse.gif
            [clickurl] => 
        )

    [21] => stdClass Object
        (
            [bid] => 55
            [name] => 360South
            [imageurl] => sp_360.jpg
            [clickurl] => 
        )

    [22] => stdClass Object
        (
            [bid] => 43
            [name] => Systema
            [imageurl] => sp_systema.gif
            [clickurl] => 
        )

    [23] => stdClass Object
        (
            [bid] => 38
            [name] => Lowe Financial Group
            [imageurl] => sp_lowe.gif
            [clickurl] => http://lowefinancial.com/
        )

    [24] => stdClass Object
        (
            [bid] => 49
            [name] => Kim Reed Conveyancing
            [imageurl] => sp_kimreed.jpg
            [clickurl] => 
        )

    [25] => stdClass Object
        (
            [bid] => 45
            [name] => Mordialloc Sporting Club
            [imageurl] => msc logo.jpg
            [clickurl] => 
        )

)

这是用于拆分数组的 php 函数:

Here's the php function which is meant to split the array:

function split_array($array, $slices) { 

        $perGroup = floor(count($array) / $slices);
        $Remainder = count($array) % $slices ;
        $slicesArray = array();

        $i = 0;
        while( $i < $slices ) {
            $slicesArray[$i] = array_slice($array, $i * $perGroup, $perGroup);
            $i++;
        }

        if ( $i == $slices ) { 
            if ($Remainder > 0 && $Remainder < $slices) {

                $z = $i * $perGroup +1;
                $x = 0;
                while ($x < $Remainder) {

                    $slicesRemainderArray = array_slice($array, $z, $Remainder+$x);
                    $remainderItems = array_merge($slicesArray[$x],$slicesRemainderArray);
                    $slicesArray[$x] = $remainderItems;

                $x++;
                $z++;
                }
            }
        };

        return $slicesArray;
    }

这是拆分的结果(它以某种方式将原始数组中的项目复制到较小的数组中):

Here's the result of the split (it somehow duplicates items from the original array into the smaller arrays):

Array
(
    [0] => Array
        (
            [0] => stdClass Object
                (
                    [bid] => 57
                    [name] => Southern Suburbs Physiotherapy Centre
                    [imageurl] => sp_sspc.jpg
                    [clickurl] => http://www.sspc.com.au
                )

            [1] => stdClass Object
                (
                    [bid] => 35
                    [name] => Bendigo Bank Parkdale / Mentone East
                    [imageurl] => sp_bendigo.gif
                    [clickurl] => http://www.bendigobank.com.au
                )

            [2] => stdClass Object
                (
                    [bid] => 38
                    [name] => Lowe Financial Group
                    [imageurl] => sp_lowe.gif
                    [clickurl] => http://lowefinancial.com/
                )

            [3] => stdClass Object
                (
                    [bid] => 39
                    [name] => Main Street Mordialloc
                    [imageurl] => main street cafe.jpg
                    [clickurl] => 
                )

            [4] => stdClass Object
                (
                    [bid] => 48
                    [name] => Beachside Osteo
                    [imageurl] => sp_beachside.gif
                    [clickurl] => http://www.beachsideosteo.com.au/
                )

            [5] => stdClass Object
                (
                    [bid] => 33
                    [name] => Two Brothers
                    [imageurl] => sp_2brothers.gif
                    [clickurl] => http://www.2brothers.com.au/
                )

            [6] => stdClass Object
                (
                    [bid] => 40
                    [name] => Ripponlea Mitsubishi
                    [imageurl] => sp_mitsubishi.gif
                    [clickurl] => 
                )

        )

    [1] => Array
        (
            [0] => stdClass Object
                (
                    [bid] => 44
                    [name] => Mordialloc Personal Trainers
                    [imageurl] => sp_mordipt.gif
                    [clickurl] => #
                )

            [1] => stdClass Object
                (
                    [bid] => 41
                    [name] => Print House Graphics
                    [imageurl] => sp_printhouse.gif
                    [clickurl] => 
                )

            [2] => stdClass Object
                (
                    [bid] => 39
                    [name] => Main Street Mordialloc
                    [imageurl] => main street cafe.jpg
                    [clickurl] => 
                )

            [3] => stdClass Object
                (
                    [bid] => 48
                    [name] => Beachside Osteo
                    [imageurl] => sp_beachside.gif
                    [clickurl] => http://www.beachsideosteo.com.au/
                )

            [4] => stdClass Object
                (
                    [bid] => 33
                    [name] => Two Brothers
                    [imageurl] => sp_2brothers.gif
                    [clickurl] => http://www.2brothers.com.au/
                )

            [5] => stdClass Object
                (
                    [bid] => 40
                    [name] => Ripponlea Mitsubishi
                    [imageurl] => sp_mitsubishi.gif
                    [clickurl] => 
                )

        )

    [2] => Array
        (
            [0] => stdClass Object
                (
                    [bid] => 56
                    [name] => Logical Services
                    [imageurl] => sp_logical.jpg
                    [clickurl] => 
                )

            [1] => stdClass Object
                (
                    [bid] => 43
                    [name] => Systema
                    [imageurl] => sp_systema.gif
                    [clickurl] => 
                )

            [2] => stdClass Object
                (
                    [bid] => 48
                    [name] => Beachside Osteo
                    [imageurl] => sp_beachside.gif
                    [clickurl] => http://www.beachsideosteo.com.au/
                )

            [3] => stdClass Object
                (
                    [bid] => 33
                    [name] => Two Brothers
                    [imageurl] => sp_2brothers.gif
                    [clickurl] => http://www.2brothers.com.au/
                )

            [4] => stdClass Object
                (
                    [bid] => 40
                    [name] => Ripponlea Mitsubishi
                    [imageurl] => sp_mitsubishi.gif
                    [clickurl] => 
                )

        )

    [3] => Array
        (
            [0] => stdClass Object
                (
                    [bid] => 53
                    [name] => Carmotive
                    [imageurl] => sp_carmotive.jpg
                    [clickurl] => http://www.carmotive.com.au/
                )

            [1] => stdClass Object
                (
                    [bid] => 45
                    [name] => Mordialloc Sporting Club
                    [imageurl] => msc logo.jpg
                    [clickurl] => 
                )

            [2] => stdClass Object
                (
                    [bid] => 33
                    [name] => Two Brothers
                    [imageurl] => sp_2brothers.gif
                    [clickurl] => http://www.2brothers.com.au/
                )

            [3] => stdClass Object
                (
                    [bid] => 40
                    [name] => Ripponlea Mitsubishi
                    [imageurl] => sp_mitsubishi.gif
                    [clickurl] => 
                )

        )

    [4] => Array
        (
            [0] => stdClass Object
                (
                    [bid] => 59
                    [name] => Pure Sport
                    [imageurl] => sp_psport.jpg
                    [clickurl] => http://www.puresport.com.au/
                )

            [1] => stdClass Object
                (
                    [bid] => 54
                    [name] => PPM Builders
                    [imageurl] => sp_ppm.jpg
                    [clickurl] => http://www.hotfrog.com.au/Companies/P-P-M-Builders
                )

            [2] => stdClass Object
                (
                    [bid] => 40
                    [name] => Ripponlea Mitsubishi
                    [imageurl] => sp_mitsubishi.gif
                    [clickurl] => 
                )

        )

    [5] => Array
        (
            [0] => stdClass Object
                (
                    [bid] => 46
                    [name] => Patterson Securities
                    [imageurl] => cmyk patersons_withtag.jpg
                    [clickurl] => 
                )

            [1] => stdClass Object
                (
                    [bid] => 34
                    [name] => Adriano's Pizza & Pasta
                    [imageurl] => sp_adrian.gif
                    [clickurl] => #
                )

        )

    [6] => Array
        (
            [0] => stdClass Object
                (
                    [bid] => 55
                    [name] => 360South
                    [imageurl] => sp_360.jpg
                    [clickurl] => 
                )

            [1] => stdClass Object
                (
                    [bid] => 37
                    [name] => Mordialloc Cellar Door
                    [imageurl] => sp_cellardoor.gif
                    [clickurl] => 
                )

        )

    [7] => Array
        (
            [0] => stdClass Object
                (
                    [bid] => 49
                    [name] => Kim Reed Conveyancing
                    [imageurl] => sp_kimreed.jpg
                    [clickurl] => 
                )

            [1] => stdClass Object
                (
                    [bid] => 58
                    [name] => Dicount Lollie Shop
                    [imageurl] => new dls logo.jpg
                    [clickurl] => 
                )

        )

    [8] => Array
        (
            [0] => stdClass Object
                (
                    [bid] => 51
                    [name] => Richmond and Bennison
                    [imageurl] => sp_richmond.jpg
                    [clickurl] => http://www.richbenn.com.au/
                )

            [1] => stdClass Object
                (
                    [bid] => 52
                    [name] => Mordialloc Travel and Cruise
                    [imageurl] => sp_morditravel.jpg
                    [clickurl] => http://www.yellowpages.com.au/vic/mordialloc/mordialloc-travel-cruise-13492525-listing.html
                )

        )

    [9] => Array
        (
            [0] => stdClass Object
                (
                    [bid] => 50
                    [name] => Letec
                    [imageurl] => sp_letec.jpg
                    [clickurl] => www.letec.biz
                )

            [1] => stdClass Object
                (
                    [bid] => 36
                    [name] => Big River
                    [imageurl] => sp_bigriver.gif
                    [clickurl] => 
                )

        )

)

^^ 如您所见,在新创建的较小数组中,原始数组中有重复项.

^^ As you can see there are duplicates from the original array in the newly created smaller arrays.

我以为我可以使用多维删除重复函数来删除重复项,但这不起作用.我猜我的问题出在 array_split 函数中.

I thought I could remove the duplicates using a multi-dimensional remove duplicate function but that didn't work. I'm guessing my problem is in the array_split function.

有什么建议吗?:)

推荐答案

array_chunk,其中就是这样.

好吧,我不想调试,所以我用array_reduce写了一个版本:>

Well, I didn't feel like debugging, so I wrote a version with array_reduce:

$pergroup = 2;
$redfunc = function ($partial, $elem) use ($pergroup) {
    $groupCount = count($partial);
    if ($groupCount == 0 || count(end($partial)) == $pergroup)
        $partial[] = array($elem);
    else
        $partial[$groupCount-1][] = $elem;

    return $partial;
};

$arr = array(1,2,3,4,5);

print_r(array_reduce($arr, $redfunc, array()));

给予

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 2
        )

    [1] => Array
        (
            [0] => 3
            [1] => 4
        )

    [2] => Array
        (
            [0] => 5
        )

)

这篇关于php将数组拆分为更小的偶数数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆