2013-04-02 2 views
0

У меня есть форма, которая должна будет содержать входные данные от пользователей для фильтрации результатов поиска. Я не являюсь оригинальным дизайнером формы. Я один из двух способов, которые я видел, чтобы фильтровать результаты. 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) 

)

Я понял, как трубы получили в ключевые значения, и я попытался скорректировать мои ключи, чтобы соответствовать, но это тоже не сработало.

Любые предложения о том, как я могу фильтровать эти типы результатов с помощью ключа, который не является ни одним значением и динамически изменен?

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) 

Я сделал ключевое значение и значение строки такой же, пытаясь установить некоторый тип фильтрации. Но так как третье значение в массиве1 будет динамически передаваться в предложение while. У меня нет способа сопоставить это число с Array2.

Мой ожидаемый результат

array (

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

       'provider_id' => 127654) 
     ) 

В том, что только один из 6 входов соответствует одному из значений array1.

ответ

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); 
})); 
+0

Спасибо! Я просто запускал код, и он отлично работает. – user1846439

+0

Я пытаюсь заменить print_r рабочей переменной, но я не смог этого сделать. Я попытался заменить его на $ frows = array_intersect_ukey(). И я попытался повторить strcmp. Что я могу использовать для загрузки в рабочую переменную? – user1846439

+0

@ user1846439 Можете ли вы написать то, что у вас есть сейчас в кодексе, чтобы продемонстрировать проблему, с которой вы столкнулись? –

1

или вы можете сделать это. удача :)

$parsed1 = array(); 
foreach($array1 as $key => $value) { 
    $splited = explode("|", $key); 
    $parsed1[$splited[1]] = $value; 
} 
var_dump(array_intersect_key($parsed1,$array2)); 
Смежные вопросы