1

この質問は、この投稿に関連してい ます 4 つの配列の多次元配列で mysql の結果セットを配布する方法

私は受け入れられた答えを得ましたが、コードを変更したいのですが、あまり成功していません...

基本的に、mysql の結果セットから、上から下にできるだけ均等に分散された 4 つの配列にデータを入力する必要があります... Chris Hayes は機能するソリューションを提供しましたが、今日テストしたところ、配列にデータを入力することがわかりました。上からではなく、左から右…

4つの配列を上から下にできるだけ多く設定するようにコードを変更するにはどうすればよいですか?

$i = 0;
$array_r = array( array(), array(), array(), array() );

while ($stmt->fetch()) {
    array_push($array_r[$i], array(... values ...));
    $i = ($i + 1) % 4;
}
4

3 に答える 3

3

入力配列をまったく操作しない最終バージョン:

for ($num = count($input), $offset = 0; $numBuckets > 0; $numBuckets -= 1, $num -= $bucketSize, $offset += $bucketSize) {
  $bucketSize = ceil($num / $numBuckets);
  $output[] = array_slice($input, $offset, $bucketSize);
}

以前の回答:

次のことを試してください。

<?php
$input = range('A', 'Z'); // test input data
$output = array();        // the output container
$numBuckets = 4;          // number of buckets to fill

for (; $numBuckets > 0; $numBuckets -= 1) {
  $output[] = array_splice($input, 0, ceil(count($input) / $numBuckets));
}

print_r($output);

配列の長さを常に再チェックすることなく、代替バージョン

for ($num = count($input); $numBuckets > 0; $numBuckets -= 1, $num -= $bucketSize) {
  $bucketSize = ceil($num / $numBuckets);
  $output[] = array_splice($input, 0, $bucketSize);
}
于 2013-08-05T18:18:58.307 に答える
0

私は何かをテストしましたが、うまくいくようです...しかし、それは非常にスパゲッティに見えます...お気軽にコードを最適化してください。ありがとう。

$num_rows = $stmt->num_rows; //number of records returned by the result set
$min_per_column = (int)($num_rows/4); //minimum records per column
$remainder = $num_rows % 4; //the remainder

$array_r = array(array(), array(), array(), array());
$i = 1;
$col = 0;

//how many records to populate before moving to the next array?
$rows = ($col < $remainder) ? $min_per_column + 1 : $min_per_column;

while ($stmt->fetch()) {
    array_push($array_r[$col], array($r_recordingid, $r_title, $r_subtitle, $r_seourl));
    $i++;

    //initialize values for new array
    if ($i > $rows) {
       $i = 1;
       $col++;
       $rows = ($col < $remainder) ? $min_per_column + 1 : $min_per_column;
    }
}
于 2013-08-05T18:06:12.503 に答える