0

我有一个表单,需要排除用户输入来过滤搜索结果。我不是表单的原始设计者。我看到过滤结果的两种方法之一。A)我可以尝试将 sql 查询限制为选定的代码或 B)过滤返回的结果。我正在尝试 B。

我试过了

var_dump(array_intersect_key($array1, $array2));

没有成功:

Array1 如下所示:

array (

        '|00006|5' => array('pid' => 111

                'provider_id' => 123456 )  

        '|93000|34' => array('pid' => 112

                'provider_id' => 127654 )

        '|93225|1' => array('pid' => 113

                'provider_id' => 127893 )

)

我弄清楚了管道是如何进入键值的,我试图调整我的键以匹配,但这也不起作用。

关于如何使用不是单个值且动态更改的键来过滤这些类型的结果的任何建议?

Array2 看起来像:

  99232 => string '99232' (length=5)
  85610 => string '85610' (length=5)
  93970 => string '93970' (length=5)
  93000 => string '93000' (length=5)
  99406 => string '99406' (length=5)
  99215 => string '99215' (length=5)

我试图设置某种类型的过滤,使键值和字符串值相同。但是由于 array1 中的第三个值将在 while 子句中动态传递。我无法将该数字与 Array2 匹配。

我的预期结果是

    array (

        '|93000|34' => array('pid' => 112

                'provider_id' => 127654 )
       )

因为 6 个输入中只有一个与 array1 值之一匹配。

4

2 回答 2

1

您必须定义您的关键比较功能,然后使用array_intersect_ukey()

$a = array (
        '|00006|5' => array('pid' => 111,
                'provider_id' => 123456 ),
        '|93000|34' => array('pid' => 112,
                'provider_id' => 127654 ),
        '|93225|1' => array('pid' => 113,
                'provider_id' => 127893 ),
);

$b = array('93000' => '93000');

print_r(array_intersect_ukey($a, $b, function($ka, $kb) {
        if ($ka[0] == '|') {                     // transform key
                $ka = substr($ka, 1, strrpos($ka, '|') - 1);
        }
        if ($kb[0] == '|') {                     // transform key
                $kb = substr($kb, 1, strrpos($kb, '|') - 1);
        }
        // perform regular comparison
        return strcmp($ka, $kb);
}));
于 2013-04-02T04:15:29.200 回答
1

或者你可以这样做。祝你好运 :)

$parsed1 = array();
foreach($array1 as $key => $value) {
    $splited = explode("|", $key);
    $parsed1[$splited[1]] = $value;
}
var_dump(array_intersect_key($parsed1,$array2));
于 2013-04-02T04:48:09.153 回答