PHP - 打印多维数组

时间:2014-03-20 20:23:30

标签: php arrays multidimensional-array

我有这段代码的大脑块。我想在PHP中打印一个多维数组,其中'列'由连字符和“行”分隔。由换行符分隔。

我的问题是我的代码会打印出一个' - '在每一行的末尾。在查看我的代码时,这很明显:

N.B。 ($result是一个二维数组,即$result[][]

foreach($result as $row){
    foreach($row as $column){
            echo $column . "-";
    }
    echo "\n";
}

这是输出:

42-1-1394752507-16.125-
43-1-1394752569-16.125-
44-1-1394752632-16.562-
45-1-1394752693-17.125-

打印出来以避免每行尾随-的最佳方式是什么?我可以检查当前$column是否是$row中的最后一个元素,但我实际上并不知道如何执行此操作

6 个答案:

答案 0 :(得分:7)

implode是你的朋友:

foreach($result as $row){
    echo implode('-', $row) . "\n";
}

答案 1 :(得分:1)

您可以使用implode

代替内部foreach
implode($row,"-");

答案 2 :(得分:1)

<?php

$row = [
    '42' => [1, 2, 3],
    '43' => [2, 3, 4],
];

array_walk($row, function($item, $key) {
    echo $key . implode('-', $item) . PHP_EOL;
});

答案 3 :(得分:1)

  

我可以检查当前的$列是否是最后一个元素   在$行但我实际上不知道如何做到这一点

implode()是要走的路,但是如果你想了解如何找出当前列是否是最后一列:

// foreach (value)
foreach($result as $row){
  $column_count = count($row);

  // for each (key => value)
  foreach($row as $column_index => $column){
    echo $column;

    if($column_index < $column_count - 1){
      echo "-";
  }
  echo "\n";
}

答案 4 :(得分:0)

一个选项:

foreach($result as $row){
$c='';
    foreach($row as $column){
            $c.= $column . "-";
    }
    $c=rtrim($c,'-');
    echo "$c\n";
}

答案 5 :(得分:0)

如果你还想避免使用尾随换行符,你可以使用这个单行:

echo implode(array_map(function($row) {return implode('-', $row);}, $result), "\n");

当然,oneliners是丑陋而不干净的代码。

这段代码有什么作用?它在每一行上使用implode,而array_map创建一个已经内爆行的平面(1维)数组。再次被换行线破坏了。

最后,这个解决方案并不是最高效的解决方案。但它是一个整洁的oneliner:)