7

次のようなデータがあります。

Array
(
    [0] => Array
        (
            [a] => largeeeerrrrr
            [b] => 0
            [c] => 47
            [d] => 0
        )

    [1] => Array
        (
            [a] => bla
            [b] => 1
            [c] => 0
            [d] => 0
        )

    [2] => Array
        (
            [a] => bla3
            [b] => 0
            [c] => 0
            [d] => 0
        )

)

そして、次のような出力を生成したい:

title1        | title2 | title3 | title4
largeeeerrrrr | 0      | 47     | 0
bla           | 1      | 0      | 0
bla3          | 0      | 0      | 0

PHPでこれを達成する簡単な方法はどれですか? このような単純な作業にライブラリを使用することは避けたいと思います。

4

6 に答える 6

11

使用するprintf

$i=0;
foreach( $itemlist as $items)
{
 foreach ($items as $key => $value)
 {
   if ($i++==0) // print header
   {
     printf("[%010s]|",   $key );
     echo "\n";
   }
   printf("[%010s]|",   $value);
 }
 echo "\n"; // don't forget the newline at the end of the row!
}

これは 10 個のパディング スペースを使用します。BoltClock が言うように、おそらく最初に最も長いストリングの長さを確認する必要があります。そうしないと、テーブルが長いストリングでジャッキアップされてしまいます。

于 2011-02-22T18:33:43.743 に答える
6

自動列幅を持つ別のライブラリ。

 <?php
 $renderer = new ArrayToTextTable($array);
 echo $renderer->getTable();
于 2015-07-13T11:17:51.810 に答える
1

Byron Whitlock に加えて:コールバックでusort()を使用して、最長の配列値で並べ替えることができます。例:

function lengthSort($a, $b){
    $a = strlen($a);
    $b = strlen($b);
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}
于 2011-02-22T18:37:43.113 に答える