我如何使用 php 在 for 循环的最后一次迭代中删除一些字符?
How do i remove some character at the last iteration of the for loop using php?
$x='"CREATE TABLE MyGuests (';
for($i=0; $i<count($arr);$i++)
{
$y="`$arr[$i]` VARCHAR(30) NOT NULL";
$x.=$y.",";
}
$sql= $x.')";';
echo $sql."<br /><br />";
结果如下
CREATE TABLE MyGuests
(author VARCHAR(30) NOT NULL,
title VARCHAR(30) NOT NULL,
genre VARCHAR(30) NOT NULL,
price VARCHAR(30) NOT NULL,
publish_date VARCHAR(30) NOT NULL,
description VARCHAR(30) NOT NULL,
);
但我想在最后一次迭代中删除 NOT NULL 之后的那个“,”
$x='"CREATE TABLE MyGuests (';
for($i=0; $i<count($arr);$i++)
{
$y="`$arr[$i]` VARCHAR(30) NOT NULL";
if($i!=count($arr)-1)
$x.=$y.",";
}
$sql= $x.')";';
echo $sql."<br /><br />";
我添加了判断是否是最后一个的条件
试试下面的代码:
$x='"CREATE TABLE MyGuests (';
for($i=0; $i<count($arr);$i++)
{
$y="`$arr[$i]` VARCHAR(30) NOT NULL";
if($i == count($arr)-1){
$x.=$y;
} else {
$x.=$y.",";
}
}
$sql= $x.')";';
echo $sql."<br /><br />";
你可以这样做:
$x='"CREATE TABLE MyGuests (';
for($i=0; $i<count($arr);$i++)
{
$y="`$arr[$i]` VARCHAR(30) NOT NULL";
if ($i < count($arr)-1) // check if it's the last element or not
$x.=$y.",";
else
$x=$y;
}
$sql= $x.')";';
或者这样:
$x='"CREATE TABLE MyGuests (';
for($i=0; $i<count($arr);$i++)
{
$y="`$arr[$i]` VARCHAR(30) NOT NULL";
$x.=$y.",";
}
$x = rtrim($x, ",") // remove the last comma
$sql= $x.')";';
或甚至更好,只需使用implode
将数组转换为逗号分隔的字符串。像这样:
$x = $arr;
array_walk($x, function(&$value, $key) { $value = '`' . $value . '` VARCHAR(30) NOT NULL'; });
$sql = '"CREATE TABLE MyGuests (' . implode(',', $x) . ')";';
还有其他几种方法:
$x = '';
for ($i = 0; $i < count($arr); $i++)
{
$y = "`${arr[$i]}` VARCHAR(30) NOT NULL";
$x .= ($x ? '' : ',') . $y;
}
$sql = '"CREATE TABLE MyGuests (' . $x . ')";';
echo $sql . "<br /><br />";
或者:
$cols = array();
for ($i = 0; $i < count($arr); $i++)
{
$cols[] = "`${arr[$i]}` VARCHAR(30) NOT NULL";
}
$sql = '"CREATE TABLE MyGuests (' . implode(',', $cols) . ')";';
echo $sql . "<br /><br />";
最佳解决方案是在最后一次迭代后使用substr
$x='"CREATE TABLE MyGuests (';
for($i=0; $i<count($arr);$i++)
{
$y="`$arr[$i]` VARCHAR(30) NOT NULL";
$x.=$y.",";
}
if(!empty($arr)) {
$x = substr($x, 0, -1);
}
$sql= $x.')";';
echo $sql."<br /><br />";
或者您也可以像这样在循环中放置一个 if 条件
if($i+1 == count($arr)){
$x.=$y.",";
} else {
$x.=$y.",";
}
哦,常见,5个答案和最优解是用subsrt?
这个
$sql = '"CREATE TABLE MyGuests (`'.implode("` VARCHAR(30) NOT NULL,`", $arr).'` VARCHAR(30) NOT NULL)";';
将在一个字符串中执行完全相同的操作
$x='"CREATE TABLE MyGuests (';
for($i=0; $i<count($arr);$i++)
{
$y="`$arr[$i]` VARCHAR(30) NOT NULL";
$x.=$y.",";
}
$sql= $x.')";';
echo $sql."<br /><br />";
结果如下
CREATE TABLE MyGuests
(author VARCHAR(30) NOT NULL,
title VARCHAR(30) NOT NULL,
genre VARCHAR(30) NOT NULL,
price VARCHAR(30) NOT NULL,
publish_date VARCHAR(30) NOT NULL,
description VARCHAR(30) NOT NULL,
);
但我想在最后一次迭代中删除 NOT NULL 之后的那个“,”
$x='"CREATE TABLE MyGuests (';
for($i=0; $i<count($arr);$i++)
{
$y="`$arr[$i]` VARCHAR(30) NOT NULL";
if($i!=count($arr)-1)
$x.=$y.",";
}
$sql= $x.')";';
echo $sql."<br /><br />";
我添加了判断是否是最后一个的条件
试试下面的代码:
$x='"CREATE TABLE MyGuests (';
for($i=0; $i<count($arr);$i++)
{
$y="`$arr[$i]` VARCHAR(30) NOT NULL";
if($i == count($arr)-1){
$x.=$y;
} else {
$x.=$y.",";
}
}
$sql= $x.')";';
echo $sql."<br /><br />";
你可以这样做:
$x='"CREATE TABLE MyGuests (';
for($i=0; $i<count($arr);$i++)
{
$y="`$arr[$i]` VARCHAR(30) NOT NULL";
if ($i < count($arr)-1) // check if it's the last element or not
$x.=$y.",";
else
$x=$y;
}
$sql= $x.')";';
或者这样:
$x='"CREATE TABLE MyGuests (';
for($i=0; $i<count($arr);$i++)
{
$y="`$arr[$i]` VARCHAR(30) NOT NULL";
$x.=$y.",";
}
$x = rtrim($x, ",") // remove the last comma
$sql= $x.')";';
或甚至更好,只需使用implode
将数组转换为逗号分隔的字符串。像这样:
$x = $arr;
array_walk($x, function(&$value, $key) { $value = '`' . $value . '` VARCHAR(30) NOT NULL'; });
$sql = '"CREATE TABLE MyGuests (' . implode(',', $x) . ')";';
还有其他几种方法:
$x = '';
for ($i = 0; $i < count($arr); $i++)
{
$y = "`${arr[$i]}` VARCHAR(30) NOT NULL";
$x .= ($x ? '' : ',') . $y;
}
$sql = '"CREATE TABLE MyGuests (' . $x . ')";';
echo $sql . "<br /><br />";
或者:
$cols = array();
for ($i = 0; $i < count($arr); $i++)
{
$cols[] = "`${arr[$i]}` VARCHAR(30) NOT NULL";
}
$sql = '"CREATE TABLE MyGuests (' . implode(',', $cols) . ')";';
echo $sql . "<br /><br />";
最佳解决方案是在最后一次迭代后使用substr
$x='"CREATE TABLE MyGuests (';
for($i=0; $i<count($arr);$i++)
{
$y="`$arr[$i]` VARCHAR(30) NOT NULL";
$x.=$y.",";
}
if(!empty($arr)) {
$x = substr($x, 0, -1);
}
$sql= $x.')";';
echo $sql."<br /><br />";
或者您也可以像这样在循环中放置一个 if 条件
if($i+1 == count($arr)){
$x.=$y.",";
} else {
$x.=$y.",";
}
哦,常见,5个答案和最优解是用subsrt? 这个
$sql = '"CREATE TABLE MyGuests (`'.implode("` VARCHAR(30) NOT NULL,`", $arr).'` VARCHAR(30) NOT NULL)";';
将在一个字符串中执行完全相同的操作