$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.",";
}
О, общий, 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";
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) // 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) . ')";';
$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 />";
Я добавил условие, чтобы проверить, является ли он последним.