0

インデックスが割り切れるかどうかに応じて、配列をグループ化しようとしています。for ループと foreach ループ、および if($i % 3 == 0) のさまざまな組み合わせを試しましたが、必要な方法で出力されません。

これは非常に単純化された配列です (元のデータには非常に機密性の高い情報が多数含まれています...)

元の配列は次のようになります。

$item[0]['Section 1']['Item 2'] => 1334;
$item[1]['Section 2']['Item 3'] => 15454;
$item[2]['Section 3']['Item 4'] => 1452;
$item[3]['Section 4']['Item 5'] => 1341;
$item[4]['Section 5']['Item 6'] => 1788655;
$item[5]['Section 6']['Item 7'] => 13;
$item[6]['Section 7']['Item 8'] => 142;
$item[7]['Section 8']['Item 9'] => 15678;
$item[8]['Section 9']['Item 10'] => 15542;
$item[9]['Section 10']['Item 11'] => 16578;
$item[10]['Section 11']['Item 12'] => 18452;
$item[11]['Section 12']['Item 13'] => 16565;

次のように、3 つのレコードごとにグループ化しようとしています。

$newitem[0]['Section 1']['Item 2'] => 1334;
$newitem[0]['Section 2']['Item 3'] => 15454;
$newitem[0]['Section 3']['Item 4'] => 1452;
$newitem[1]['Section 4']['Item 5'] => 1341;
$newitem[1]['Section 5']['Item 6'] => 1788655;
$newitem[1]['Section 6']['Item 7'] => 13;
$newitem[2]['Section 7']['Item 8'] => 142;
$newitem[2]['Section 8']['Item 9'] => 15678;
$newitem[2]['Section 9']['Item 10'] => 15542;
$newitem[3]['Section 10']['Item 11'] => 16578;
$newitem[3]['Section 11']['Item 12'] => 18452;
$newitem[3]['Section 12']['Item 13'] => 16565;
4

3 に答える 3

0

提案使用array_chunk http://www.php.net/manual/en/function.array-chunk.php

$item = array_chunk($item, 3);

または

$newItem = array ();
$x = 0;
$t = 0;
foreach ( $item as $value ) {
    if ($x < 3) {
        $newItem [$t] [$x] = $value;
        $x ++;
    } else {
        $t ++;
        $x = 0;
        $newItem [$t] = array ();
    }
}

var_dump ( $newItem );
于 2012-04-21T01:59:48.230 に答える
0

array_chunkは必要なものです。新しい配列は 3 つの要素に対して同じインデックス 0 を持っていることがわかるので、2 次元配列の場合と同じように新しい配列を反復する必要があります。

試す:

http://www.php.net/manual/en/function.array-chunk.php

于 2012-04-21T02:00:25.323 に答える
0

これはそれを行う必要があります:

$newindex = 0;
$newitem = array();
for($i = 0; $i < count($item); ++$i)
{
    $newindex = (int) $i / 3;
    if(!isset($newitem[ $newindex ]))
        $newitem[ $newindex ] = array();

    $newitem[ $newindex ] = array_merge($newitem[ $newindex ], $item[ $i ]);
}

出力へのリンク(のダンプ$newitem)

トリックは(int) $i / 3、 を取り$i、それを で割り、小数点以下を切り捨てる3にキャストすることです。int

于 2012-04-21T02:03:16.403 に答える