Функция генерации слагов PHP дает неправильный вывод

Вы можете взять объект с произвольным количеством свойств и создать массив объектов.

var a = [1, 2, 3],
    b = ["a", "b", "c"],
    result = Object
        .entries({ a, b })
        .reduce((r, [k, a]) => {
            a.forEach((v, i) => Object.assign(r[i] = r[i] || {}, { [k]: v }));
            return r;
        }, []);
    
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

0
задан Akshay Shrivastav 19 January 2019 в 15:30
поделиться

2 ответа

Вы можете обрезать снова, чтобы удалить лишние '-' с обеих сторон строки.

   $slug = strtolower(trim(preg_replace('/[^A-Za-z]+/', '-', 'top-5-ways--to-avoid-list-')));
    echo trim($slug, '-');

Результат: список лучших способов избежать

0
ответ дан Abdur Rahman 19 January 2019 в 15:30
поделиться

slugify ваша строка таким образом, он удалит нежелательные символы, включая -.

trim () принимает в качестве 2-го параметра все символы, которые вы хотите удалить . Посмотрите на прокомментированную строку THIS WILL FIX YOUR EXISTING PROBLEM

<?php
function slugify($string, $delimiter = '-'){
  $clean = preg_replace("/[^a-zA-Z\/_|+ -]/", '', $string); 
  $clean = strtolower($clean);
  $clean = preg_replace("/[\/_|+ -]+/", $delimiter, $clean);
  $clean = trim($clean, $delimiter); // THIS WILL FIX YOUR EXISTING PROBLEM
  return $clean;
}

echo slugify('-Top ways-to avoid list-');
echo PHP_EOL;
echo slugify('top 5 ways to get in top');
?>

Вывод:

top-ways-to-avoid-list 
top-ways-to-get-in-top

DEMO: https: //3v4l.org/ljtlZ

ИЛИ с вашим существующим кодом, обрезающим несколько символов - или пробелы

<?php
echo strtolower(trim(preg_replace('/[^A-Za-z]+/', '-', '-Top ways-to avoid list-'),'- '));
echo PHP_EOL;
echo strtolower(trim(preg_replace('/[^A-Za-z]+/', '-', 'top 5 ways to get in top'),'- '));
?>

ДЕМО: [ 1119] https://3v4l.org/aBtHI

0
ответ дан Always Sunny 19 January 2019 в 15:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: