Как проверить, существует ли строка и добавляет ли она +1 в конце? - PullRequest
1 голос
/ 03 марта 2012

Допустим, я проверил, существует ли

$strig = "red-hot-chili-peppers-californication";

в моей базе данных:

$query = dbquery("SELECT * FROM `videos` WHERE `slug` = '".$strig."';");
$checkvideo = dbrows($query);
if($checkvideo == 1){

// the code to be executed to rename $strig
// to "red-hot-chili-peppers-californication-2"
// it would be great to work even if $string is defined as 
// "red-hot-chili-peppers-californication-2"  and 
// rename $string to "red-hot-chili-peppers-californication-3"  and so on...

}

Я хочу сделать это, чтобы создать уникальных слагов для более дружественной структуры URL.

Спасибо.

Ответы [ 2 ]

8 голосов
/ 03 марта 2012

Я могу предложить вам источник функции Codeigniter increment_string():

/**
 * CodeIgniter String Helpers
 *
 * @package     CodeIgniter
 * @subpackage  Helpers
 * @category    Helpers
 * @author      ExpressionEngine Dev Team
 * @link        http://codeigniter.com/user_guide/helpers/string_helper.html
 */

/**
 * Add's _1 to a string or increment the ending number to allow _2, _3, etc
 *
 * @param   string  $str  required
 * @param   string  $separator  What should the duplicate number be appended with
 * @param   string  $first  Which number should be used for the first dupe increment
 * @return  string
 */
function increment_string($str, $separator = '_', $first = 1)
{
    preg_match('/(.+)'.$separator.'([0-9]+)$/', $str, $match);

    return isset($match[2]) ? $match[1].$separator.($match[2] + 1) : $str.$separator.$first;
}

Увеличивает строку, добавляя к ней число или увеличивая число. Полезно для создания «копий» или файловой или дублирующей базы данных контент с уникальными заголовками или слагами.

Пример использования:

echo increment_string('file', '_'); // "file_1"
echo increment_string('file', '-', 2); // "file-2"
echo increment_string('file-4'); // "file-5"
2 голосов
/ 03 марта 2012
$str = "some-string-that-might-end-in-a-number";
$strLen = strlen($str);
//check the last character of the string for number
if(intval($str[$strLen-1])>0)
{
    //Now we replace the last number with the number+1
    $newNumber = intval($str[$strLen-1]) +1;
    $str = substr($str, 0, -1).$newNumber;
}
else
{
    //Now we append a number to the end;
    $str .= "-1";
}

Конечно, ограничение состоит в том, что он может получить только последнюю цифру .. что, если число было 10?

$str = "some-string-that-might-end-in-a-number";
$strLen = strlen($str);

$numberOfDigits = 0;
for($i=$strLen-1; $i>0; $i--)
{
    if(intval($str[$i])==0)
    {
        $numberOfDigits = $strLen-($i-1);
        break;
    }
}

//Now lets do the digit modification
$newNumber = 0;
for($i=1; $i<=$numberOfDigits; $i++)
{
    $newNumber += intval($str[$strLen-$i])*((10*$i)-10));
}
if($newNumber == 0)
{ $newNumber = 1; }

$newStr = "-{$newNumber}";

//Now lets add the new string to the old one
$str = substr($str, 0, ($numberOfDigits*-1)).$newNumber;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...