按键值过滤数组,其中包含管道

时间:2013-04-02 03:57:32

标签: php arrays filter

我有一个表单,除了用户输入以外,还需要过滤搜索结果。我不是表格的原始设计师。我看到过滤结果的两种方式之一。 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值之一匹配。

2 个答案:

答案 0 :(得分: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);
}));

答案 1 :(得分:1)

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

$parsed1 = array();
foreach($array1 as $key => $value) {
    $splited = explode("|", $key);
    $parsed1[$splited[1]] = $value;
}
var_dump(array_intersect_key($parsed1,$array2));