如何根据最相关的值过滤和排序数组?

时间:2015-10-12 16:23:44

标签: php arrays sorting

假设我有一个如下所示的数组:

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
        )

)

1 个答案:

答案 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集成。