Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中,如何在表中显示数组内容_Php_Mysql_Ascii Art - Fatal编程技术网

在PHP中,如何在表中显示数组内容

在PHP中,如何在表中显示数组内容,php,mysql,ascii-art,Php,Mysql,Ascii Art,如果我在MySQL客户端中进行选择,我将得到如下输出: mysql> select * FROM `group` LIMIT 2; +----------+---------------------+-----------------+-------------+ | group_id | group_supergroup_id | group_deletable | group_label | +----------+---------------------+-------------

如果我在MySQL客户端中进行选择,我将得到如下输出:

mysql> select * FROM `group` LIMIT 2;
+----------+---------------------+-----------------+-------------+
| group_id | group_supergroup_id | group_deletable | group_label |
+----------+---------------------+-----------------+-------------+
|        1 |                   4 |               0 | defaut      |
|        8 |                   1 |               1 | dbdfg       |
+----------+---------------------+-----------------+-------------+
如何在这样的表中转换PDO fetch或fetchAll数组

下面是一个代码使用示例:

$prep = $pdo->query('SELECT * FROM `group` LIMIT 2;');
$arr = $prep->fetchAll(PDO::FETCH_ASSOC);
echo renderMySQLTable($arr);

使用表格,并在css中提供一些样式

echo "<table class='datasheet'>";
foreach($arr as $a)
{
    echo "<tr>";
        foreach($a as $v)
        {
                echo "<td>$v</td>";
        }
    echo "</tr>";
}
echo "</table>";

但非pdo aproach:

function renderMySQLTable($query) {
  echo `mysql -H -e"$query"`;
}
对于阵列来说,这并不难。几圈,你就有你需要的了。 从运行print_r$arr开始,查看它的结构是否接近mysql客户端输出:


PDO本身没有什么好处。。。这只是一个工具,供某人使用。别忘了列标题。一个带有mysql\u num\u fields/mysql\u fetch\u fields的循环可以生成它。嗯,我知道我没有明确指定它,但我真的需要一个TXT输出。那么这怎么能生成一个表呢?它不就是输出mysql-H-w$query吗?背勾有特殊意义吗?算了吧。无论如何,你不应该使用它,它更像是一个骗局。了解如何处理数组,朋友,这很重要,但打印为var\u export和var\u dump不会返回类似mysql的表表示形式。我的问题不是理解数组是如何工作的——我完全同意这一部分——而是如何有一个干净的、适应性强的代码,可以很好地以特定的格式显示表。这种表示需要处理最大的列内容大小和所有的东西,我很确定有人已经为它制作了一个方法。不,你不同意这一部分。了解如何处理数组,以便能够自己编写这两个简单数组。Cheers@FMaz008,即使任何人已经有了一个函数/方法,自己编写它要比找到它快得多。这不像是在PHP中完全实现FTP协议,这是一项非常简单的任务,需要10分钟的延迟编码才能得到结果。UTF-8重音将其计算为2chr有问题,因此它会弄乱空间填充,但总体上是可行的!UTF8使用mb_strlen而不是strlen。在使用任何mb_函数之前,不要忘记使用mb_internal_encoding'UTF-8'设置内部编码。
$data = array(
    array(
        'group_id'            => '1',
        'group_supergroup_id' => '4',
        'group_deletable'     => '0',
        'group_label'         => 'default',
    ),
    array(
        'group_id'            => '8',
        'group_supergroup_id' => '1',
        'group_deletable'     => '1',
        'group_label'         => 'dbdfg',
    ),
);

if ( empty($data) ) {
    echo "Empty set";
} else {
    // determine widths of titles
    $colWidths = array();
    foreach ( $data[0] as $title => $value ) {
        $colWidths[$title] = strlen($title);
    }
    // determine widths of columns
    foreach ( $data as $row ) {
        foreach ( $row as $title => $value ) {
            if ( is_null($value) ) {
                $value = 'NULL';
            }
            if ( $colWidths[$title] < strlen($value) ) {
                $colWidths[$title] = strlen($value);
            }
        }
    }
    // generate horizontal border
    $horizontalBorder = '+';
    foreach ( $colWidths as $title => $width ) {
        $horizontalBorder .= str_repeat('-', $width + 2) . "+";
    }
    $horizontalBorder .= "\n";
    // print titles
    echo $horizontalBorder;
    echo '|';
    foreach ( $data[0] as $title => $value ) {
        printf(" %-{$colWidths[$title]}s |", $title);
    }
    echo "\n";
    echo $horizontalBorder;
    // print contents
    foreach ( $data as $row ) {
        echo "|";
        foreach ( $row as $title => $value ) {
            if ( is_null($value) ) {
                $value = 'NULL';
            }
            printf(" %-{$colWidths[$title]}s |", $value);
        }
        echo "\n";
    }
    echo $horizontalBorder;
}