这段代码让我脑子出了问题。我想在PHP中打印一个多维数组,其中'列'由连字符分隔,'行'由换行分隔。
我的问题是我的代码在每行的末尾打印一个'-'。在查看我的代码时,这是很明显的:
注意:($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
中的最后一个元素,但我实际上不知道如何做到这一点
implode
是你的朋友:
foreach($result as $row){
echo implode('-', $row) . "n";
}
<?php
$row = [
'42' => [1, 2, 3],
'43' => [2, 3, 4],
];
array_walk($row, function($item, $key) {
echo $key . implode('-', $item) . PHP_EOL;
});
我可以做一个检查,看看当前$列是否是最后一个元素但是我不知道怎么做
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";
}
可以直接使用内爆:
implode($row,"-");
一个选项:
foreach($result as $row){
$c='';
foreach($row as $column){
$c.= $column . "-";
}
$c=rtrim($c,'-');
echo "$cn";
}
如果您还想避免尾随换行符,您可以使用下面的一行代码:
echo implode(array_map(function($row) {return implode('-', $row);}, $result), "n");
当然,在线代码是丑陋和不干净的代码。
这段代码是做什么的?它在每一行上使用implode
,并且array_map
创建一个已经内爆行的平面(一维)数组。还是用换行符。
最后,这个解决方案不是性能最好的。但它是一个简洁的联机符:)