1

列数を定義できるようにしたいのですが、これは列を定義しません。出力を見ると、列数ではなく行数が変更されていることがわかります。

できる限り詳細に文書化しました。ご協力ありがとうございます。初めて投稿するので、間違っていたらご容赦ください:)

public function SplitIntoColumns(array $arrayTranspose=array(), $no_of_cols=3,$min=0) {
    $result = '<div class="column">'."\n";
    // The 2D array
    $colArr = array();
    // The tmpArray
    $tmpArray = array();
    if (count($arrayTranspose) <= $min) {
        $result .= implode("\n", $arrayTranspose);
    }
    else {
        // Set size of the array    
        $cnt = intval(floor(count($arrayTranspose)));
        $row = 0;
        $col = 0;
        // Create Multidimensional array from Single dimensional array
        foreach($arrayTranspose as $key => $val){
            $colArr[$col][$row] = $arrayTranspose[$key];
            // Store the data from the array
            $result .= $colArr[$col][$row]." ";
            $col++;
            // If columns are equal to the set value then start
            // From the beginning on a new row
            if($col == $no_of_cols) {
                $col = 0;
                $row++;
                // create columns
                $result .= '</div><div class="column">'."\n";   
            }
        }
    }
    // This says numberOfRows, but it is actually the number of columns
    $numberOfRows = intval((floor($cnt) / $no_of_cols));
    // A loop to transpose into columns
    for($i = 0; $i <= $no_of_cols; $i++) {
        for($j = 0; $j <= $numberOfRows; $j++){
            $tmpArray[$j][$i] = $colArr[$i][$j];
            $result2 .= $tmpArray[$j][$i].' ';  
        }
        $result2 .= '</div><div class="column">'."\n";
    }
    // return stuff
    $result2 .= "</div> <!-- /.column -->\n";
    return $result2;
}
}
$Util = new SplitColumns();
$content = array('Lorem ipsum','elit sed do','labore et dolore', 'dolor sit amet', 'eiusmod tempor', 'magna aliqua',  'consectetur adipisicing', 'incididunt ut');
// This is where you can define the number of columns you want
// However, this does not define columns.  You will notice when
// You see the output that it changes the number of rows
echo $Util->SplitIntoColumns($content, 4);

この出力:

Lorem ipsum eiusmod tempor
elit sed do magna aliqua
labore et dolore consectetur adipisicing
dolor sit amet incididunt ut

望ましい出力は次のようになります。

Lorem ipsum labore et dolore eiusmod tempor consectetur adipisicing
elit sed do dolor sit amet magna aliqua incididunt ut
4

2 に答える 2

1

あなたは物事を複雑にしすぎています!array_chunk()データを正しくフォーマットするために、いくつかの簡単な計算と組み合わせて使用​​します。

function splitIntoColumns($array, $columns=3)
{
    $numberOfRows = ceil(count($array) / $columns);
    return array_chunk($array, $numberOfRows);
}

これにより、列の配列が残ります。$returnValue[0] は 0 番目の列の要素の配列であり、列の制限まで続きます。出力例 (4 列):

array(4) {
  [0]=>
  array(2) {
    [0]=>
    string(11) "Lorem ipsum"
    [1]=>
    string(11) "elit sed do"
  }
  [1]=>
  array(2) {
    [0]=>
    string(16) "labore et dolore"
    [1]=>
    string(14) "dolor sit amet"
  }
  [2]=>
  array(2) {
    [0]=>
    string(14) "eiusmod tempor"
    [1]=>
    string(12) "magna aliqua"
  }
  [3]=>
  array(2) {
    [0]=>
    string(23) "consectetur adipisicing"
    [1]=>
    string(13) "incididunt ut"
  }
}

そこから HTML を追加するのは非常に簡単で、さまざまな方法で行うことができます。たとえば、次のようになります。

$result = splitIntoColumns($inputArray, 3);

foreach($result as $column => $columnMembers)
{
    echo '<div class="column">';
    foreach($columnMembers as $key => $val)
    {
        echo $val; 
        //or whatever else you want to do in here
    }
    echo '</div> <!-- /column -->';
}

edit: html 出力の例

于 2012-08-09T18:15:14.203 に答える
0

より簡単な方法で期待される出力を取得できます。

$content = array('Lorem ipsum','elit sed do','labore et dolore', 'dolor sit amet', 'eiusmod tempor', 'magna aliqua',  'consectetur adipisicing', 'incididunt ut');    
for($i = 0; $i<count($content); $i++){
    if($i % 2 == 0){
        $col1 .= $content[$i] . ' ';
    }
    else{
        $col2 .= $content[$i] . ' ';
    }
}    
echo $col1 . "\n" . $col2;

出力:

Lorem ipsum labore et dolore eiusmod tempor consectetur adipisicing
elit sed do dolor sit amet magna aliqua incididunt ut 
于 2012-08-09T18:29:01.797 に答える