Прежде всего, я рекомендую изменить синтаксис на:
list($family, $style) = explode('-', $font, 2);
Как кажется, вы хотите сравнить только стиль. Тогда вам не нужен in_array
, но вы можете просто использовать оператор if
.
К вашей проблеме обрезки: как вы можете видеть в документации chop , второй аргумент говорит, какие буквы удалить с правой стороны строки - вы указываете буквы: -,w,e,b,f,o,n,t
поэтому начинаем с самой правильной буквы - если она является одной из тех, которые он обрезал - когда сталкиваюсь с первой буквой, которой нет остановки ->
Для этого вы получите thi
вместо thin
, как удалить n
, но не i
. И hairli
вместо hairline
и оба n
и e
находятся в письмах -,w,e,b,f,o,n,t
, но не i
.
Живой пример: 3v4l .
Если все, что вы хотите (и я думаю, это то, что вы хотите), это удалить суффикс:
substr($fonf, 0, - strlen('-webfont'));
Отредактировано:
Это пример для вашего кода:
$files = ['merriweather-regular-webfont.woff','merriweather-thin-webfont.woff','merriweather-hairline-webfont.woff'];
foreach($files as $file) {
$font = basename($file, ".woff"); // remove the file type
$font = str_replace('-webfont', '', $font); // remove the suffix
list($family, $style) = explode('-', $font, 2); // explode for 2 parts: family and style
echo "Family: $family and style: $style" . PHP_EOL;
if (in_array($style, ['thin', 'hairline'])) {
echo esc_html('font-weight:100;font-style:normal;');
} elseif (in_array($style, ['regular', 'normal'])) {
echo esc_html('font-weight:400;font-style:normal;');
} else {
echo esc_html('font-weight:400;font-style:normal;'); // Fallback
}
}