如何使用 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 之后的","

最佳解决方案是在上次迭代后使用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.",";
}

尝试以下代码:

$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 = '';
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 />";
 $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)  // 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) . ')";';

哦,常见的,5个答案和最佳解决方案是使用subsrt?这

$sql = '"CREATE TABLE MyGuests (`'.implode("` VARCHAR(30) NOT NULL,`", $arr).'` VARCHAR(30) NOT NULL)";';

将在一个字符串中执行完全相同的操作

菲菲德尔