26

私は18個の値の配列を持っています:

$array = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r');

この配列を 12 個の異なる配列に分割したいので、次のようになります。

array(
    0 => array('a', 'b'),
    1 => array('c', 'd'),
    2 => array('e', 'f'),
    3 => array('g', 'h'),
    4 => array('i', 'j'),
    5 => array('k', 'l'),
    6 => array('m'),
    7 => array('n'),
    8 => array('o'),
    9 => array('p'),
   10 => array('q'),
   11 => array('r')
)

機能が動作していないようです

function array_split($array, $parts){
    return array_chunk($array, ceil(count($array) / $parts));
}

$result = array_split($array, 12);

12個ではなく9個の異なる配列を取得するためです。

array(
    0 => array('a', 'b'),
    1 => array('c', 'd'),
    2 => array('e', 'f'),
    3 => array('g', 'h'),
    4 => array('i', 'j'),
    5 => array('k', 'l'),
    6 => array('m', 'n'),
    7 => array('o', 'p'),
    8 => array('q', 'r')
)

どうすればこれを行うことができますか?ありがとう。

4

11 に答える 11

1

それをコンパイルして、それがあなたのためになるかどうかを確認してください:

<?php

$array = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm');

$sliceA = 0;
$sliceB = 2;

$final = array(array_slice($array, $sliceA, $sliceB));


for ($i=$sliceB; $i<sizeof($array); $i++)
{
    $final[$sliceB-1] = array($array[$i]);
    $sliceB++;
}

var_dump($final);
于 2013-03-22T22:14:35.927 に答える
1
<?php
$array = range('a','r');
$length = array(2=>6,1=>6); // 2=>6 means -- first six elements of new array will have 2 elements each and then, 1=>6 means -- next six elements of new array will have 1 element each
$target = array(); // or use []  in PHP 5.4
foreach($length as $i=>$times) {
    while($times>0){
        $target[] = array_splice($array, 0, $i);
        $times--;
    }
}
print_r($target);
?>
于 2013-05-05T11:30:52.247 に答える
1

ceil(count($array) / $parts)2を与えるので、2つのアイテムがなくなるまで、各配列は2つのアイテムで埋められます。したがって、最後のものには1つのアイテムがあります。これは、配列に大量のデータがある場合には機能しますが、少量のデータがある場合には機能しません。

于 2013-03-22T21:08:41.857 に答える
1

あなたが説明しているのは、array_chunk の目的ではありません。array_slice()を使用して、配列のどの部分を新しい配列にするかを自分で計算する必要があります。(そして for ループを使用して元の配列を反復処理します)

アップデート:

あなたを助けることができるいくつかの計算:

minimum_fill = floor(array_length / nr_buckets)
bigger_buckets_amount = array_length - (minimum_fill / nr_buckets)

バケツを埋めるアルゴリズム: 配列をループし、最初のbigger_buckets_amount量のバケツを(minimum_fill + 1)で埋め、残りのバケツを で埋めますminimum_fill

于 2013-03-22T21:08:50.767 に答える
0

これはあなたのためにそれを行います!
ここでは、関数 smallify() を使用して、15 要素の配列をそれぞれ 5 要素の 3 つの配列に分割しました。

<?php

$bigArray = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);

echo ("<pre>");
print_r (smallify($bigArray, 3));
echo ("<pre/>");


function smallify($arr, $numberOfSlices){

  $sliceLength = sizeof($arr) /$numberOfSlices;
  for($i=1; $i<=$numberOfSlices; $i++){

       $arr1 = array_chunk($arr, $sliceLength*$i);
       return $arr1;
       unset($arr1);

   }

}
?>

結果

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

[1] => Array
    (
        [0] => 6
        [1] => 7
        [2] => 8
        [3] => 9
        [4] => 10
    )

[2] => Array
    (
        [0] => 11
        [1] => 12
        [2] => 13
        [3] => 14
        [4] => 15
    )

)
于 2015-09-29T08:55:00.927 に答える