php
  • strpos
  • 2015-10-27 48 views 2 likes 
    2

    的SoundCloud的API returns a string of tags像这样每个音轨:过滤的SoundCloud的标签用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所有歌曲。

    当我试图缩小包含这一术语的曲目时,这会变得很麻烦,其中一些术语包括其他标签中使用的词。

    因此,例如,如果该标签我一直在寻找为Pop,使用这种方法我得到的标签Soft PopCountry PopPop ballads等歌曲,因为使用strpos()刚刚找到字符串的一部分。这不是我所希望的结果;在这种情况下,我只想获取标记为Pop的歌曲。

    我想我需要将此字符串分隔成一个数组,然后循环访问数组以确保每个值都隐含地与我正在搜索的标签相同...但我不知道该怎么做那。我猜split()由报价,然后split()剩下的空格?

    是否有PHP函数可以比较字符串和字符串的长度,我猜,以确保它与我的搜索词相同?

    +0

    我觉得最好的方式是,虽然正则表达式和PHP数组解析所有标签......我会回来在这里稍后再回答,如果没有人回答的话。 – Dinei

    +0

    如果您有一个单词搜索术语“流行”,您可以首先使用定义多字标签的引号过滤掉。我认为正则表达式在这里会有更好的帮助。 – 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

    相关问题