【问题标题】: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

【问题讨论】:

    标签: php sql


    【解决方案1】:

    而不是

    print_r($data);
    

    试试

    print "<pre>";
    print_r($data);
    print "</pre>";
    

    【讨论】:

    • 另外值得一提的是,您可以将true作为第二个参数传递给print_r,以获取string的数据。现在你可以从你的路由文件中return '&lt;pre&gt;'.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 '&lt;pre&gt;',print_r($a,1),'&lt;/pre&gt;';
    【解决方案4】:

    试试这个:

    foreach($data[0] as $child) {
       echo $child . "\n";
    }
    

    代替print_r($data)

    【讨论】:

    • &lt;?php foreach($data[0] as $child) { echo $child . "&lt;br /&gt;"; }?&gt; 这很好,谢谢布赖恩!
    •  是显而易见的选择时,为什么这是选择的答案?
    • 如果你有一个多维数组,这将不起作用。
    • @Alesana 是的,但是 OP 没有多维数组。我认为正如其他人对这个答案的评论,你想走的路是&lt;pre&gt;print_r($data)&lt;/pre&gt;。不过,看到对 5 岁以上老答案的新评论总是很有趣! :)
    • 啊,就我而言,我正在使用多维数组。我之前没有发表评论,所以当我看到没有其他人指出这一点时,我认为这可能是一个绝佳的机会!
    【解决方案5】:

    我认为var_dump()的被遗忘的兄弟var_export()的输出最好——它更紧凑:

    echo "<pre>";
    var_export($menue);
    echo "</pre>";
    

    顺便说一句:不一定要使用&lt;pre&gt;。查看网页源代码时,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】:

                  我只会使用在线工具。

                  【讨论】:

                  • 我刚刚将其更新为更加强大,感谢您提供链接。
                  【解决方案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/>';
                    }
                    ?>
                    

                    【讨论】:

                      猜你喜欢
                      • 2016-06-06
                      • 2016-01-23
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2014-04-26
                      • 2022-08-02
                      • 2014-05-30
                      相关资源
                      最近更新 更多