如何使用PHP过滤掉数组中的某些项?

时间:2013-09-19 23:16:27

标签: php regex

我想根据一些搜索条件筛选出一个php数组,但它不是很有效。

我一直在尝试在谷歌上找到的这个代码,但是它出错了吗?

$shortWords = '/'.$_GET['sSearch'].'/i';
$rResult = array_filter($rResult, 
     function($x) use ($shortWords) {
       return preg_match($shortWords,$x);
      });

这是错误:

 preg_match() expects parameter 2 to be string, array given

我不太清楚“函数($ x)使用....”正在做什么......我对php的限制。

这是“array_filter()”之前数组的样子:

 array(
    [0] =>
        array(
            ['unit_nbr'] =>'BBC 2'
            ['p_unit_group_id'] =>NULL
            ['name'] =>1
            ['unit_id'] =>22640
            ['properties_id'] =>1450
            )

    [1] =>
        array(

            ['unit_nbr'] =>'BBC 3'
            ['p_unit_group_id'] =>NULL
            ['name'] =>1
            ['unit_id'] =>22641
            ['properties_id'] =>1450
) 

当我将搜索字符串传递给函数时,我想将unit_nbr“BBC 2”保留在数组中。我不知道我做错了什么。

感谢任何帮助。

提前致谢。

2 个答案:

答案 0 :(得分:0)

尝试这样的事情:

foreach ($rResult as $okey => $oval) {
    foreach ($oval as $ikey => $ival) {
        if ($ival != $_GET['sSearch']) {
             unset($rResult[$okey]);
        }
    }
}

如果这不是你想要的,那么我需要更多关于你想要达到的目标的信息。

答案 1 :(得分:0)

问题是多维数组。当您传递给回调时,$x是数组:

    array(
        ['unit_nbr'] =>'BBC 2'
        ['p_unit_group_id'] =>NULL
        ['name'] =>1
        ['unit_id'] =>22640
        ['properties_id'] =>1450
        )

但您仍需要检查该数组中的项目。

$shortWords = '/'.$_GET['sSearch'].'/i';
$rResult = array_filter($rResult, 
    function($x) use ($shortWords) {
        foreach ($x as $_x) {
            if (preg_match($shortWords,$_x)) {
                return true;
            }
            return false;
        }
    }
);