我正在编写一个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++;
}
}