Я пишу код для автоматизации fontfaceobserver.js.Для каждого файла шрифта в каталоге мне нужно получить имя семейства шрифтов, чтобы я мог напечатать его в javascript.Некоторые шрифты имеют одинаковое семейное имя, за которым следует имя стиля, например, cousine-webfont.woff & cousine-italic-webfont.woff .Я хочу напечатать только первое вхождение этих дубликатов и пропустить остальные.
Я пытался использовать array_unique()
, но, думаю, я делаю это неправильно.
function my_fontload() {
// Locate font files
$font_path = get_stylesheet_directory_uri() . "/path/to/fonts/";
$files = glob(get_stylesheet_directory( __FILE__ ) . '/path/to/fonts/*.woff', GLOB_BRACE);
$suffix = '-webfont';
$observer = A;
foreach($files as &$file) {
$obs = $observer++;
$font = basename($file, '.woff'); // remove the file type
$font = str_replace($suffix, '', $font); // remove the -webfont suffix
$family = explode("-", $font);
// Various attempts:
// $fam = $family[0]; // First needle. Creates duplicates if present.
// $fam = array_unique($family[0]); // Doesn't work. Outputs nothing.
// $fam = array_unique($fam); // Doesn't work. Outputs nothing.
// $fam = array_unique(array($fam)); // Outputs string 'Array'.
echo '
var font'. $obs . '=new FontFaceObserver( \\\'' . $fam. '\\\' );
';
}
unset ($observer);
unset ($file);
}
Желаемый выход:
var fontA=new FontFaceObserver( \'cousine\' );
var fontB=new FontFaceObserver( \'liberationmono\' );
var fontC=new FontFaceObserver( \'merriweather\' );
var fontD=new FontFaceObserver( \'merriweathersans\' );
Вывод с использованием $fam = $family[0];
var fontA=new FontFaceObserver( \'cousine\' );
var fontB=new FontFaceObserver( \'cousine\' );
var fontC=new FontFaceObserver( \'liberationmono\' );
var fontD=new FontFaceObserver( \'liberationmono\' );
var fontE=new FontFaceObserver( \'liberationmono\' );
var fontF=new FontFaceObserver( \'merriweather\' );
var fontG=new FontFaceObserver( \'merriweather\' );
var fontH=new FontFaceObserver( \'merriweather\' );
var fontI=new FontFaceObserver( \'merriweather\' );
var fontJ=new FontFaceObserver( \'merriweathersans\' );
var fontK=new FontFaceObserver( \'merriweathersans\' );
При использовании $fam = array_unique($family[0]);
или $fam = $family[0];
в сочетании с $fam = array_unique($fam);
var fontA=new FontFaceObserver( \'\' );
var fontB=new FontFaceObserver( \'\' );
var fontC=new FontFaceObserver( \'\' );
var fontD=new FontFaceObserver( \'\' );
var fontE=new FontFaceObserver( \'\' );
var fontF=new FontFaceObserver( \'\' );
var fontG=new FontFaceObserver( \'\' );
var fontH=new FontFaceObserver( \'\' );
var fontI=new FontFaceObserver( \'\' );
var fontJ=new FontFaceObserver( \'\' );
var fontK=new FontFaceObserver( \'\' );
При использовании $fam = $family[0];
в сочетании с $fam = array_unique(array($fam));
var fontB=new FontFaceObserver( \'Array\' );
var fontC=new FontFaceObserver( \'Array\' );
var fontD=new FontFaceObserver( \'Array\' );
var fontE=new FontFaceObserver( \'Array\' );
var fontF=new FontFaceObserver( \'Array\' );
var fontG=new FontFaceObserver( \'Array\' );
var fontH=new FontFaceObserver( \'Array\' );
var fontI=new FontFaceObserver( \'Array\' );
var fontJ=new FontFaceObserver( \'Array\' );
var fontK=new FontFaceObserver( \'Array\' );
Я также пытался использовать второй foreach()
внутри основного для создания временного массива, из которого я мог извлечь уникальные результаты, но у меня не получилось.