Php split into smaller arrays

I have a function that should split my array into smaller, evenly distributed arrays, however it seems to duplicate my data along the way. If anyone can help me, it will be great.

Here's the original array:

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] => 
        )

)

Here's the php function for splitting an 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 split (it somehow duplicates elements from the original array into 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 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 of the original array in the newly created smaller arrays.

I thought I could remove duplicates using the multidimensional duplicate removal function, but that didn't work. I assume my problem is the array_split function.

Any suggestions?:)

+5
8

EDIT: array_chunk, .

, , 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
        )

)
+7
$sections = array_chunk(array('k', 'l', 'm', 'n', 'o'), 2);
+6

, .

, ($Remainder), array_pop(), ?

, .

+1
function split_array(&$array, $slices) {
  $result = array();
  $l = count($array)-1;
  for ($i=0; $i<=$l; $i++) {
    if ($i == 0  || $i % $slices == 0) $tmp = array();
    $tmp[] = $array[$i];
    if ($i == $l || $i % $slices == 1) $result[] = $tmp; 
  }
  return $result;
}
+1
+1

array_chunk , ; (, , , , , ).

, , , , . , , , . , . array_chunk, , ( ).

<?php
function array_group($array, $num)                                                
{                                                                           
    $num = (int) $num;                                                      
    if ($num < 1) {                                                         
        throw new \InvalidArgumentException('At least one group must be returned.');
    }                                                                       

    $count = count($array);                                                
    if ($count && $count % $num === 0) {                                    
        return array_chunk($array, $count / $num);                         
    }                                                                       

    $groups = [];                                                           
    $offset = 0;                                                            
    do {                                                                    
        $length   = ceil(($count - $offset) / $num);                
        $groups[] = array_slice($array, $offset, $length);                 
        $offset   += $length;                                               
    } while (--$num);                                                       

    return $groups;                                                         
} 

print_r(array_chunk(array(1, 2, 3, 4, 5, 6, 7), 3));
/* Produces
Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )

    [1] => Array
        (
            [0] => 4
            [1] => 5
            [2] => 6
        )

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

) */

print_r(array_group(array(1, 2, 3, 4, 5, 6, 7), 3));
/* Produces
Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )

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

    [2] => Array
        (
            [0] => 6
            [1] => 7
        )
) */
+1

Try this simple use. When it finds an empty string, it splits the array into two arrays. One from start to empty row index. Other from empty row index to last.
Note. The Emty string is not included in both. It is used only to verify conditions.

    $column[] = "id";
    $column[] = "name";
    $column[] = "email";
    $column[] = "password";
    $column[] = "";
    $column[] = "uid";
    $column[] = "uname";
    $column[] = "mname";
    $column[] = "lname";
    $column[] = "city";
    $column[] = "country";
    $column[] = "zip";
    $column[] = "cell";
    $column[] = "address";
    split_array($column);

function split_array($column)
{

    $total = count($column);
    $num = array_search('',$column);

    $split = $total - $num ;
    $outer_sql = array_slice( $column , - ($split) + 1);
    array_splice($column , $num);

    echo "<pre>";
    print_r($outer_sql);
    echo "</pre>";
    echo "<pre>";
    print_r($column);
    echo "</pre>";  

}
0
source

This is an easy way to split a php array into two equal sections. and you can get all the elements and values ​​of both arrays using foreach ease

list($firstarray, $secondarray) = array_chunk($vorstand_two_column, ceil(count($all_array_contents) / 2));  

foreach($firstarray as $fa) {
.... Code ....
}

foreach($secondarray as $sa) {
.... Code ....
}
0
source

All Articles