在循环中打印逗号分隔的数据时,如何防止尾随逗号



我正在编写一个php代码,该代码应该将一些DB数据作为一组用逗号分隔的数组进行回显。

代码如下:

include('inc_db.php');  
$query = "SELECT * FROM product WHERE p_shop_id=1";
$result = $conn->query($query);
if ($result->num_rows > 0) {
while($row = $result->fetch_array()) {
if($result->num_rows == 1)
echo "[" .$row['p_description'] ."," .$row['p_category'] ."," .$row['p_cost'] ."," .$row['p_stock'] ."]";
else
echo "[" .$row['p_description'] ."," .$row['p_category'] ."," .$row['p_cost'] ."," .$row['p_stock'] ."], ";
}
}
$conn->close();

*include行是到DB的连接。

在线:

if($result->num_rows == 1)

我正在尝试检测循环是否到达结果的最后一行,因此回显行将不带逗号结束(就像"else"短语中发生的那样(。

我想我做错了if语句,因为当我运行程序时,我得到的数组在每一行的末尾都有一个逗号,包括最后一行。

结果是:

[Eggs, Food, 20, 20], [Coca Cola, Drinks, 5, 30],

预期结果是:

[Eggs, Food, 20, 20], [Coca Cola, Drinks, 5, 30]

(末尾没有逗号(

那么,检测while循环到达最后一行的正确方法是什么呢?

您不需要计算行数。您也不需要知道是否正在处理最后一行。

我真的不明白为什么您需要这种格式,但您可以使用implode()和方括号来简洁地存储行数据。然后,当循环结束时,你可以用逗号再次内爆——这确保了不会有任何混乱需要清理。

此代码段将数组转换为大括号括起、逗号分隔的字符串数组,然后在循环之后,数组转换为逗号分隔的串。(演示(

$result = $conn->query("SELECT p_description, p_category, p_cost, p_stock FROM product WHERE p_shop_id = 1");
$rows = [];
foreach ($result as $row) {
$rows[] = '[' . implode(', ', $row) . ']';
}
echo implode(', ', $rows);

或者,您可以在每个支撑字符串之前加上0或1个逗号:(条件演示((功能演示(

foreach ($result as $i => $row) {
echo ($i ? ', ' : '') . '[' . implode(', ', $row) . ']';
//echo str_repeat(', ', (bool)$i) . '[' . implode(', ', $row) . ']';
}

或者,如果您喜欢函数迭代器,可以省略临时变量$rows,只使用array_map():(Demo(

echo implode(', ', array_map(function($row) {
return '[' . implode(', ', $row) . ']'; 
}, $result));

或者,您可以使用array_reduce()并在迭代行时检查是否有任何数据写入$carry变量。这个概念是,如果你不处理第一次迭代,只在前面加一个逗号。(演示(

echo array_reduce($result, function($carry, $row) {
$carry .= (!$carry ? '' : ', ') . '[' . implode(', ', $row) . ']'; 
return $carry;
});

您可以声明一个变量,该变量将在循环中递增,并使用它来检查$result->num_rows,以查看它是否是最后一条记录。

if ($result->num_rows > 0) {
$index = 0;
while($row = $result->fetch_array()) {
if($result->num_rows == ($index+1)) //Check if it's the last record
echo "[" .$row['p_description'] ."," .$row['p_category'] ."," .$row['p_cost'] ."," .$row['p_stock'] ."]";
else
echo "[" .$row['p_description'] ."," .$row['p_category'] ."," .$row['p_cost'] ."," .$row['p_stock'] ."], ";
$index++;

}
}

相关内容

  • 没有找到相关文章

最新更新