6

テーブルで使用するために配列値を垂直に並べ替えるために使用される他の方法をチェックしてきましたが、それらのほとんどは、テーブルを右に 90 度ひっくり返すのと同じでした。これを適切に実装する方法を考えようとしていますが、助けが必要だと思います。

たとえば、テーブル (横の順序):

a  b  c  d  e
f  g  h  i  j
k  l  m  n  o
p  q  r

次のように並べ替えられます (縦の順序):

a  e  i  m  p
b  f  j  n  q
c  g  k  o  r
d  h  l   

ご覧のとおり、最後の 2 つのセルが空であるため、構造は保持されています。

このようではありません:

a  e  i  m  q
b  f  j  n  r
c  g  k  o
d  h  l  p

この例では、テーブルを横にひっくり返したようなものです。これを適切に行う方法を知っている人はいますか?

4

3 に答える 3

1

秘訣は、「ぶら下がっている」列の 1 を引くことです。これは、最後の行で値が欠落している列です。

// setup some initial test data... rip this out and replace with whatever
$values = array();
for ($x = 0; $x < 18; ++$x)
  $values[] = chr($x + ord("a"));

列数は任意に変更できます。行数は、データのサイズを使用する列の数で割った値によって決まります。

// change # of columns to desired value
$columns = 5;
$rows = (int) ceil(count($values) / $columns);

一部の列がハングします。つまり、列の最後の行に値がありません。

// the number of columns that will "hang" or miss a value in the last row
$hanging_columns = $columns * $rows - count($values);

$counter = 0;
for ($y = 0; $y < $rows; ++$y) {
  for ($x = 0; $x < $columns; ++$x) {
    // if we've displayed all values, stop
    if ($counter++ >= count($values)) break;

    // calculate the correct index to display
    $index = ($y + $x * $rows);
    // if we are in a hanging column, we need to back up by one
    if ($x > $columns - $hanging_columns) $index -= 1;

    // display the value
    echo $values[$index] . " ";
  }
  echo "\n";
}
于 2013-07-23T05:39:56.190 に答える
0

ここで別の解決策

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


function flip90($arr, $lineHeight) 
{
    $tbl = array();

    $index = 0;
    $counter = 1;


    for($i = 0; $i < count($arr); $i++)
    {
        if($counter > $lineHeight)
        {
            $index++;
            $counter = 1;
        }

        if($counter <= $lineHeight) 
        {
            $tbl[$index][$counter] = $arr[$i];

            $counter++;
        }

    }

    return $tbl;
}

$flipped = flip90($unflipped, 5);
echo "<pre>";
var_dump($flipped);
echo "<pre>";

関数には、テーブルの寸法を記入するための配列と行の高さが必要です

于 2013-07-23T06:04:40.590 に答える