0

私はこれを数回ヒットしましたが、なぜこれが発生するのか誰かが知っているのではないかと思っていました。

私が渡している配列は、WHM / cPanel APIからのものであり、(var_dump()ed)の形式です。

array (size=14)
  '_diskquota' => string '262144000' (length=9)
  '_diskused' => string '31459' (length=5)
  'diskquota' => string '250' (length=3)
  'diskused' => string '0.03' (length=4)
  'diskusedpercent' => string '0' (length=1)
  'diskusedpercent20' => string '0' (length=1)
  'domain' => string 'xxxxxxx.co.uk' (length=20)
  'email' => string 'info@xxxxxxx.co.uk' (length=25)
  'humandiskquota' => string '250Â MB' (length=7)
  'humandiskused' => string '30.72Â KB' (length=9)
  'login' => string 'info@xxxxxxx.co.uk' (length=25)
  'mtime' => string '1347964089' (length=10)
  'txtdiskquota' => string '250' (length=3)
  'user' => string 'info' (length=4)

私はそれを以下の関数でHTMLテーブルに変換しています:

public function formatEmailAccountsArrayToTable( $email_accounts )  {
    $returnHTML = '';
    $topentag   =   '<table class="email_accounts_table">';
    $theader    =   '<thead><tr>
                        <th>Email</th><th>User</th><th>Domain</th><th>Disk Quota</th><th>Disk Used</th>
                        </tr></thead><tbody>';
    $tclosetag  =   '</tbody></table>';

    $returnHTML .= $topentag . $theader;

    foreach( $email_accounts as $v ) {
        $returnHTML .= '
            <tr>
                <td>' . $v['email'] . '</td>
                <td>' . $v['user'] . '</td>
                <td>' . $v['domain'] . '</td>
                <td>' . $v['diskquota'] . '</td>
                <td>' . $v['diskused'] . '</td>
            </tr>';
    }
    $returnHTML .= $tclosetag;

    return $returnHTML;
}

出力は次のとおりです。

Email   User    Domain  Disk Quota  Disk Used
2   2   2   2   2
3   3   3   3   3
2   2   2   2   2
0   0   0   0   0
0   0   0   0   0
0   0   0   0   0
b   b   b   b   b
i   i   i   i   i
2   2   2   2   2
3   3   3   3   3
i   i   i   i   i
1   1   1   1   1
2   2   2   2   2
i   i   i   i   i

値のいずれかがテーブルに出力される値に切り捨て/変換される理由がわかりません。

プロセスは非常に単純なはずですが、奇妙な動作をしているので、なぜこれが発生するのか誰かが知っていますか?

4

2 に答える 2

3

配列$email_accountsは2次元配列であり、foreachループで繰り返し処理します。この時点$vで、その配列の単一のプロパティを表します。

理想的には、関数が正しく機能するように配列を再構築する必要があります。クイックフィックスは次のようなことです。

$email_accounts = array($email_accounts);

それはあなたに与えるでしょう:

array
  0 => 
    array
      '_diskquota' => string '262144000' (length=9)
      '_diskused' => string '31459' (length=5)
      'diskquota' => string '250' (length=3)
于 2012-09-18T10:48:41.950 に答える
3

配列$email_accounts構造は次のようになります。

array(
    'x1' => 'y', 
    'x2' => 'y'
)

コードで機能するには、次のようになります。

array(
    0 => array(
        'x1' => 'y', 
        'x2' => 'y'
    ), 
    1 => array(
        'x1' => 'y', 
        'x2' => 'y'
    )
)
于 2012-09-18T10:50:55.710 に答える