我想我的搜索结果可以的串的位置从小到最大的。例如,搜索"香蕉"返回:


婴儿食品、李子、香蕉和稻米、紧张

香蕉、脱水,或香蕉粉末

香蕉,原

面包、香蕉、制备食谱,做人造黄油

坎贝尔汤公司,V8飞溅的果汁饮料,草莓香蕉

坎贝尔汤公司,V8溅果汁,草莓香蕉

坎贝尔汤公司,V8诉融合的果汁,草莓香蕉


我想"香蕉,原始"来第一,因为"香蕉"是第一词在此,我想"CAMPBELL汤..."拿出最后,因为"香蕉"是最后一个字。

我知道我可以使用strpos()找到位置,但是我怎么把它所有的在一起吗?

有帮助吗?

解决方案

您可以做到这一点很容易在MySQL。


 SELECT  title,LOCATE('banana',title)
 FROM myTable   
 WHERE  LOCATE('banana',title) > 0
 ORDER BY LOCATE('banana',title) 

标题代表MySQL表的列中。

其他提示

这将涉及一个不必要的复杂usort或在PHP类似的东西,最好做在查询,例如:

SELECT data, INSTR(data, 'banana') as index
FROM table
WHERE data LIKE '%banana%'
ORDER BY index != 0, index

您还可以通过该值,ASC选择INSTR(titles, 'banana') as firstIndex和秩序。这将返回草垛内针的第一位置索引的索引。标签上省略了任何一个WHERE条款不是LIKE '%banana%',你应该设置:

SELECT id, pubdate, title, INSTR(title, 'tea') as `index`
FROM article
WHERE title LIKE '%tea%'
ORDER BY `index` ASC;

如果你没得到那数据从一个SQL查询,可以进行排序,使用 usortstripos ;这样的事情应该做的:

$arr = array(
    "Babyfood, plums, bananas and rice, strained", 
    "Bananas, dehydrated, or banana powder", 
    "Bananas, raw", 
    "Bread, banana, prepared from recipe, made with margarine", 
    "CAMPBELL Soup Company, V8 SPLASH Juice Drinks, Strawberry Banana", 
    "CAMPBELL Soup Company, V8 SPLASH Smoothies, Strawberry Banana", 
    "CAMPBELL Soup Company, V8 V. FUSION Juices, Strawberry Banana", 
);

function compare_position($a, $b) {
    return stripos($a, 'banana') - stripos($b, 'banana');
}

usort($arr, 'compare_position');
var_dump($arr);

即你在这里排与您自己的定义功能,即比较的位置(情况下-insentive)的"香蕉"在两个串它接收到如参数。


你会得到这种类型的输出你的阵,一旦排序:

$ /usr/local/php-5.3/bin/php temp.php
array(7) {
  [0]=>
  string(37) "Bananas, dehydrated, or banana powder"
  [1]=>
  string(12) "Bananas, raw"
  [2]=>
  string(56) "Bread, banana, prepared from recipe, made with margarine"
  [3]=>
  string(43) "Babyfood, plums, bananas and rice, strained"
  [4]=>
  string(61) "CAMPBELL Soup Company, V8 SPLASH Smoothies, Strawberry Banana"
  [5]=>
  string(61) "CAMPBELL Soup Company, V8 V. FUSION Juices, Strawberry Banana"
  [6]=>
  string(64) "CAMPBELL Soup Company, V8 SPLASH Juice Drinks, Strawberry Banana"
}


当然,如果你得到这些数据从一个SQL query,它可能会更容易做些其它附加计算SQL边...

如果你只是想模仿strpos:

select col, locate('banana', col) as pos from t
order by pos < 1, pos, length(col)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top