2015-10-27 1 views
2

SoundCloud в returns a string of tags для каждого трека, как так:Фильтрация SoundCloud Теги с API PHP

Pop Rock "Soft Pop" "Soft Rock" "Easy Listening" Jazz 

где строка содержит список тегов, разделенных пробелов. Многословные теги цитируются в двойных кавычках.

Сначала я использовал что-то вроде

$tracktags = 'Pop Rock "Soft Pop" "Soft Rock" "Easy Listening" Jazz'; 
if(strpos($tracktags, "Soft Rock") !== false) { 
    //we found a match 
} 

Чтобы найти все песни, которые Soft Rock.

Это становится громоздким, когда я пытаюсь сузить дорожки, которые включают этот 1 термин, когда некоторые из этих терминов включают слова, используемые в других тегах.

Так, например, если этот тег я искал был Pop, используя этот метод, я получаю песни, помеченные Soft Pop, Country Pop, Pop ballads, и так далее, потому что с помощью strpos() просто находит, что часть строки. Это не результат, на который я надеюсь; в этом случае я просто хочу получить песни с тегами Pop.

Я думаю, что мне нужно отделить эту строку от массива, а затем пройти через массив, чтобы убедиться, что каждое значение неявно идентично тегу, который я ищу ... но я не уверен, как это сделать что. Я думаю, split() по предложениям, а затем split() оставшиеся пробелы?

Есть ли функция PHP, которая может сравнивать строку и длину строки, я думаю, чтобы она была идентична поисковому термину?

+0

Я думаю, что лучший способ пойти хотя регулярные выражения и разбор всех тегов в массиве PHP ... Я вернусь здесь позже и ответьте на него, если никто не ответит до этого. – Dinei

+0

Если у вас есть термин поиска по слову «pop», вы можете сначала отфильтровать те, у которых есть котировки, которые определяют многословный тег. Я думаю, что регулярное выражение поможет лучше здесь. – Twisty

ответ

2

Попробуйте разделить на массив с помощью str_getcsv() с пробелом в качестве разделителя. Он будет использовать кавычки как оболочки по умолчанию и будет игнорировать пространство внутри кавычек. Тогда просто использовать in_array():

$tracktags = str_getcsv($tracktags, ' '); 

if(in_array('Pop', $tracktags)) { 
    //we found a match 
} 

Чтобы посмотреть, что там:

print_r($tracktags);  
+0

Не могло быть более совершенным решением не только для разделения массива с двойными кавычками и пробелами, но и для проверки массива для определенного термина, который может быть сопряжен с другим членом внутри одного массива. Спасибо @AbraCadaver !! – RCNeil

 Смежные вопросы

  • Нет связанных вопросов^_^