Как удалить какой-либо символ на последней итерации цикла for с помощью php?

0
$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, на последней итерации

Теги:

6 ответов

0
Лучший ответ

оптимальным решением является использование 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.",";
}
  • 0
    Спасибо. оно работает.
  • 0
    пожалуйста
Показать ещё 2 комментария
0

О, общий, 5 ответов и оптимальное решение - использовать subsrt? Эта

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

будет делать то же самое в одной строке

PHPFIDDLE

0

Попробуйте под кодом:

$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 />";
  • 0
    благодарю вас. оно работает.
0

Вот несколько других способов:

$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 />";
  • 0
    Мне очень нравится второй способ, он строит список, а затем присоединяется к нему. Но это только я :)
0

Вы можете сделать это:

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

Я добавил условие, чтобы проверить, является ли он последним.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню