1

私は PHP を使用しており、(mysql db から) 配列にあるデータを表示したいと考えています。問題は、最初の列が常に同じ長さであるとは限らないことです。そのため、最初の列に短い文字列を含む一部の行はすべて適切に配置されますが、大きな文字列を含む行では、2 番目の列がより右に配置されます。配列は次のようになります。

$array[0][0] = "string0gvmdksd";
$array[0][1] = "42134";
$array[1][0] = "string1fges";
$array[1][1] = "234";
$array[2][0] = "string2gvmdksd sgdfsgdfg gffgdfg";
$array[2][1] = "87342";
$array[3][0] = "string3gffd";
$array[3][1] = "34";

私は解決策について考えました。配列[$i][0]で長い文字列の長さを取得し、X個のスペースと最後にタブを持つ変数を設定します(Xは長い文字列の長さです)が、それは機能していないようです.

これが私のコードです:

function addTabs($input) {
    $length = 0;
    foreach($input as $entry) {
        if(strlen($entry[0])>$length) $length = strlen($entry[0]);
    }

    return str_repeat(" ", $length)."\t";
}

$data = "";
$tabs = addTabs( $array );
foreach( $array as $entry ) {
    $data .=  $entry[0] . $tabs . $entry[1] . "\n";
}

echo "<pre>$data</pre>";

しかし、それは表示されます:

string0gvmdksd                                  42134
string1fges                                 234
string2gvmdksd sgdfsgdfg gffgdfg                                    87342
string3gffd                                 34

誰にもこれに対する解決策がありますか?

4

6 に答える 6

1

本当に<pre>タグを使用する必要がある場合は、次のようなsprintf関数を使用するのが最善です。

function maxLen($input) {
    $length = 0;
    foreach($input as $entry)
        if(strlen($entry[0])>$length) $length = strlen($entry[0]);
    return $length;
}
$len = maxLen($array);
foreach( $array as $entry ) {
    $data .=  sprintf("%-$len"."s\t%s\n", $entry[0], $entry[1]);
}
echo "<pre>$data</pre>";

出力

string0gvmdksd                      42134
string1fges                         234
string2gvmdksd sgdfsgdfg gffgdfg    87342
string3gffd                         34
于 2011-07-05T23:01:28.220 に答える
0

テーブルの境界線なしでデータを表示することを想定して、他の人が提案したようにテーブルを作成し、セル間に境界線やパディングがないようにスタイルを設定します。テーブルを作成してデータを入力するだけで、デフォルトの境界線、パディング、セル間隔が作成されますが、これはあなたが望むものではないと思います。

于 2011-07-05T23:01:37.330 に答える
0

タブは必要ありません。最初の列のコンテンツの幅を引くのを忘れていました!

おそらくあなたはこれを意味しました:

function widthOfFirstColumn($input) {
    $length = 0;
    foreach($input as $entry) {
        if(strlen($entry[1])>$length) $length = strlen($entry[1]);
    }

    return $length;
}

$data  = "";
$width = widthOfFirstColumn($array);
foreach ($array as $entry) {
    $spaces = str_repeat(" ", $width - strlen($entry[0]));
    $data .=  $entry[0] . $spaces . $entry[1] . "\n";
}

もちろん、これは表形式のデータを表示する優れた方法ではありません<table>

于 2011-07-05T22:58:02.067 に答える