我有这段代码的大脑块。我想在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
中的最后一个元素,但我实际上并不知道如何执行此操作
答案 0 :(得分:7)
implode
是你的朋友:
foreach($result as $row){
echo implode('-', $row) . "\n";
}
答案 1 :(得分:1)
您可以使用implode:
代替内部foreachimplode($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:)