假设我有一个如下所示的数组:
Array
(
[0] => Array
(
[name] => playstation sony 3 slim 320gb
)
[1] => Array
(
[name] => sony xperia acro s
)
[2] => Array
(
[name] => sony xperia tipo
)
[3] => Array
(
[name] => sony ericsson xperia arc s
)
[4] => Array
(
[name] => sony xperia go
)
[5] => Array
(
[name] => sony playstation 4
)
)
现在我想根据搜索值过滤数组,并根据最相关的(按最短的长度)对数组进行排序。
我的请求数据是:
$request = 'sony';
我期待以下结果:
Array
(
[0] => Array
(
[name] => sony xperia go
)
[1] => Array
(
[name] => sony xperia tipo
)
[2] => Array
(
[name] => sony playstation 4
)
[3] => Array
(
[name] => sony xperia sony acro ss
)
[4] => Array
(
[name] => sony ericsson xperia arc s
)
[5] => Array
(
[name] => playstation Sony 3 slim 320gb
)
)
答案 0 :(得分:3)
在PHP中实现搜索过滤的最简单方法是通过自定义回调过滤数组(array_filter
),然后使用用户定义的比较函数(usort
)对其进行排序。
这是一个简单的代码:
<?php
$data[]['name'] = 'foo';
$data[]['name'] = 'playstation sony 3 slim 320gb';
$data[]['name'] = 'sony xperia acro s';
$data[]['name'] = 'sony xperia tipo';
$data[]['name'] = 'sony ericsson xperia arc s';
$data[]['name'] = 'sony xperia go';
$data[]['name'] = 'sony playstation 4';
$data[]['name'] = 'bar';
$result = array_filter($data, function($v) { return stristr(current($v), 'sony'); });
usort($result, function($a, $b) { return strlen(current($a)) < strlen(current($b)) ? -1 : 1; });
print_r($result);
请注意,PHP不是实现复杂搜索要求的好方法。因此,对于更多面向搜索的解决方案,请考虑使用:
可以很容易地与PHP集成。