以可读/分层格式显示数组
Posted
技术标签:
【中文标题】以可读/分层格式显示数组【英文标题】:Display an array in a readable/hierarchical format 【发布时间】:2011-07-20 13:39:01 【问题描述】:这是为我的数组提取数据的代码
<?php
$link = mysqli_connect('localhost', 'root', '', 'mutli_page_form');
$query = "SELECT * FROM wills_children WHERE will=73";
$result = mysqli_query($link, $query) or die(mysqli_error($link));
if ($result = mysqli_query($link, $query))
/* fetch associative array */
if($row = mysqli_fetch_assoc($result))
$data = unserialize($row['children']);
/* free result set */
mysqli_free_result($result);
?>
当我使用 print_r($data) 时,它显示为:
Array ( [0] => Array ( [0] => Natural Chlid 1 [1] => Natural Chlid 2 [2] => Natural Chlid 3 ) )
我希望它读作:
自然儿童 1 自然之子 2 亲生孩子 3
【问题讨论】:
【参考方案1】:而不是
print_r($data);
试试
print "<pre>";
print_r($data);
print "</pre>";
【讨论】:
另外值得一提的是,您可以将true
作为第二个参数传递给print_r,以获取string
的数据。现在你可以从你的路由文件中return '<pre>'.print_r(User::all(), true);
。
我也喜欢这个答案,但 OP 只希望打印字符串,而不是数组索引(看起来像)。而且只有一维数据。我通常只在继续使用解决方案之前检查数据记录集,所以这个解决方案更适合这样的事情。【参考方案2】:
print("<pre>".print_r($data,true)."</pre>");
【讨论】:
这是理想的,因为它不会在您的数据周围添加不必要的空白。【参考方案3】:我有一个基本功能:
function prettyPrint($a)
echo "<pre>";
print_r($a);
echo "</pre>";
prettyPrint($data);
编辑:优化功能
function prettyPrint($a)
echo '<pre>'.print_r($a,1).'</pre>';
编辑: Moar 优化功能,支持自定义标签
function prettyPrint($a, $t='pre') echo "<$t>".print_r($a,1)."</$t>";
【讨论】:
目前为止的最佳答案,如果它经常与逗号一起使用,您甚至可以对其进行更多优化:echo '<pre>',print_r($a,1),'</pre>';
【参考方案4】:
试试这个:
foreach($data[0] as $child)
echo $child . "\n";
代替print_r($data)
【讨论】:
<?php foreach($data[0] as $child) echo $child . "<br />"; ?>
这很好,谢谢布赖恩!
当 是显而易见的选择时,为什么这是选择的答案?
如果你有一个多维数组,这将不起作用。
@Alesana 是的,但是 OP 没有多维数组。我认为正如其他人对这个答案的评论,你想走的路是<pre>print_r($data)</pre>
。不过,看到对 5 岁以上老答案的新评论总是很有趣! :)
啊,就我而言,我正在使用多维数组。我之前没有发表评论,所以当我看到没有其他人指出这一点时,我认为这可能是一个绝佳的机会!【参考方案5】:
我认为var_dump()
的被遗忘的兄弟var_export()
的输出最好——它更紧凑:
echo "<pre>";
var_export($menue);
echo "</pre>";
顺便说一句:不一定要使用<pre>
。查看网页源代码时,var_dump()
和 var_export()
已经格式化。
【讨论】:
我同意 var_export,但我不得不将它与 结合起来,因为它没有以正确的格式输出结果。 @Chaya-Cooper 显示页面的格式不正确,但我认为 Hexodus 的意思是“在您网页的 源代码 中”-> 尝试菜单“查看源代码”,或 Firefox 中的 Ctrl-U @fpierrat 是的,这正是我的意思。感谢您澄清这一点。 这种方法的一个好处是输出被格式化为有效的 PHP,因此您可以根据需要将其复制/粘贴回您的代码中。【参考方案6】:如果有人需要查看很酷的数组 ;) 使用此方法.. 这将打印到您的浏览器控制台
function console($obj)
$js = json_encode($obj);
print_r('<script>console.log('.$js.')</script>');
你可以这样使用..
console($myObject);
输出会是这样的..好酷啊!!
【讨论】:
【参考方案7】:foreach($array as $v) echo $v, PHP_EOL;
更新:更复杂的解决方案是:
$test = [
'key1' => 'val1',
'key2' => 'val2',
'key3' => [
'subkey1' => 'subval1',
'subkey2' => 'subval2',
'subkey3' => [
'subsubkey1' => 'subsubval1',
'subsubkey2' => 'subsubval2',
],
],
];
function printArray($arr, $pad = 0, $padStr = "\t")
$outerPad = $pad;
$innerPad = $pad + 1;
$out = '[' . PHP_EOL;
foreach ($arr as $k => $v)
if (is_array($v))
$out .= str_repeat($padStr, $innerPad) . $k . ' => ' . printArray($v, $innerPad) . PHP_EOL;
else
$out .= str_repeat($padStr, $innerPad) . $k . ' => ' . $v;
$out .= PHP_EOL;
$out .= str_repeat($padStr, $outerPad) . ']';
return $out;
echo printArray($test);
打印出来:
[
key1 => val1
key2 => val2
key3 => [
subkey1 => subval1
subkey2 => subval2
subkey3 => [
subsubkey1 => subsubval1
subsubkey2 => subsubval2
]
]
]
【讨论】:
显示“数组” 好的,那你应该迭代两次 foreach($raw as $array) foreach($array as $v) echo $v, PHP_EOL;【参考方案8】:print_r()
主要用于调试。如果您想以该格式打印它,请循环遍历数组,然后将元素打印出来。
foreach($data as $d)
foreach($d as $v)
echo $v."\n";
【讨论】:
感谢您的回复,但它会将数据打印为“数组” @Xavier:您是否尝试过我回答中的更新代码?您需要遍历两个数组。$data
是一个数组数组。
而且您的代码也运行良好,我只是将 /n 更改为 【参考方案9】:
这可能是一个更简单的解决方案:
echo implode('<br>', $data[0]);
【讨论】:
【参考方案10】:我假设有人使用 print_r 进行调试。然后我会建议使用像Kint 这样的库。这允许以可读格式显示大数组:
$data = [['Natural Child 1', 'Natural Child 2', 'Natural Child 3']];
Kint::dump($data, $_SERVER);
【讨论】:
这不是普通的 PHP 解决方案,但绝对提供有用且可读的输出!【参考方案11】:用于快速简单的 JSON 表示的单行:
echo json_encode($data, JSON_PRETTY_PRINT);
如果项目已经使用 composer,需要 symfony/yaml 并且:
echo Yaml::dump($data);
【讨论】:
【参考方案12】:echo '<pre>';
foreach($data as $entry)
foreach($entry as $entry2)
echo $entry2.'<br />';
【讨论】:
【参考方案13】:<?php
//Make an array readable as string
function array_read($array, $seperator = ', ', $ending = ' and ')
$opt = count($array);
return $opt > 1 ? implode($seperator,array_slice($array,0,$opt-1)).$ending.end($array) : $array[0];
?>
我用它来向我的访问者展示一个漂亮的打印数组
【讨论】:
【参考方案14】:使用 var_dump 函数在 php 中打印格式化数组的非常好的方法。
$a = array(1, 2, array("a", "b", "c"));
var_dump($a);
【讨论】:
【参考方案15】:我用它来获取键和它们的值 $qw = mysqli_query($connection, $query);
while ( $ou = mysqli_fetch_array($qw) )
foreach ($ou as $key => $value)
echo $key." - ".$value."";
echo "<br/>";
【讨论】:
【参考方案16】:我只会使用在线工具。
先做 print_r(your_array)
第二次复制结果并粘贴到http://phillihp.com/toolz/php-array-beautifier/
【讨论】:
我刚刚将其更新为更加强大,感谢您提供链接。【参考方案17】:这试图改进控制台应用程序中的print_r()
输出格式:
function pretty_printr($array)
$string = print_r($array, TRUE);
foreach (preg_split("/((\r?\n)|(\r\n?))/", $string) as $line)
$trimmed_line = trim($line);
// Skip useless lines.
if (!$trimmed_line || $trimmed_line === '(' || $trimmed_line === ')' || $trimmed_line === 'Array')
continue;
// Improve lines ending with empty values.
if (substr_compare($trimmed_line, '=>', -2) === 0)
$line .= "''";
print $line . PHP_EOL;
例子:
[activity_score] => 0
[allow_organisation_contact] => 1
[cover_media] => Array
[image] => Array
[url] => ''
[video] => Array
[url] => ''
[oembed_html] => ''
[thumb] => Array
[url] => ''
[created_at] => 2019-06-25T09:50:22+02:00
[description] => example description
[state] => published
[fundraiser_type] => anniversary
[end_date] => 2019-09-25
[event] => Array
[goal] => Array
[cents] => 40000
[currency] => EUR
[id] => 37798
[your_reference] => ''
【讨论】:
【参考方案18】:对于单个数组,您可以使用 implode,它的打印结果更清晰。
<?php
$msg = array('msg1','msg2','msg3');
echo implode('<br />',$msg);
echo '<br />----------------------<br/>';
echo nl2br(implode("\n",$msg));
echo '<br />----------------------<br/>';
?>
对于多维数组,您需要结合某种循环。
<?php
$msgs[] = $msg;
$msgs[] = $msg;
$msgs[] = $msg;
$msgs[] = $msg;
$msgs[] = $msg;
foreach($msgs as $msg)
echo implode('<br />',$msg);
echo '<br />----------------------<br/>';
?>
【讨论】:
以上是关于以可读/分层格式显示数组的主要内容,如果未能解决你的问题,请参考以下文章
在 Unix shell 脚本中以可读的 JSON 格式显示 curl 输出
Swifty JSON:将 JSON 数组中的对象分层列表转换为分层 Swift 对象