У меня есть функция, которая, как предполагается, разделяет мой массив на меньшие, равномерно распределенные массивы, однако это, кажется, копирует мои данные по пути. Если бы кто-либо может выручить меня, это было бы большим.
Вот исходный массив:
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, которая предназначена для разделения массива:
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;
}
Вот результат разделения (это так или иначе копирует объекты от исходного массива в меньшие массивы):
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] =>
)
)
)
^^, Как Вы видите, существуют дубликаты от исходного массива в недавно созданных меньших массивах.
Я думал, что мог удалить дубликаты с помощью многомерного, удаляют дублирующуюся функцию, но это не работало. Я предполагаю, что моя проблема находится в функции array_split.
Какие-либо предложения?:)
РЕДАКТИРОВАТЬ: Там 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
)
)
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;
}
Мне кажется, что распределение остальных предметов слишком сложно.
Если вы знаете, сколько элементов отсутствует ( $ Remainder
), почему бы вам просто не сгенерировать оставшийся фрагмент и всплывающие элементы с помощью array_pop ()
, пока он не окажется s empty?
Кстати, вы можете использовать эту процедуру и для всего массива.
Есть array_chunk, который делает именно это.
http://www.php.net/manual/en/function.array-chunk.php
[просто делаю более явной важную часть ответа Artefacto]