我有一个表单,它需要过滤用户输入的搜索结果。我不是这个表格的最初设计者。这是我看到的两种过滤结果的方法之一。A)我本可以尝试将sql查询限制为选定的代码或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 )
)
我弄清楚了管道是如何进入键值的,我试图调整我的键来匹配,但这也不起作用。
关于我如何过滤这些类型的结果与一个键,不是一个单一的值,是动态变化的建议?
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的值
你必须定义键比较函数,然后使用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);
}));
或者您可以这样做。祝你好运:)
$parsed1 = array();
foreach($array1 as $key => $value) {
$splited = explode("|", $key);
$parsed1[$splited[1]] = $value;
}
var_dump(array_intersect_key($parsed1,$array2));