0

検索結果をフィルタリングするためにユーザーからの入力を除外する必要があるフォームがあります。私はフォームの元のデザイナーではありません。結果をフィルタリングするために見た 2 つの方法のうちの 1 つです。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 の 3 番目の値は while 句で動的に配信されるためです。その番号を Array2 に一致させる方法がありません。

私の期待される結果は

    array (

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

                'provider_id' => 127654 )
       )

そのため、6 つの入力のうち 1 つだけが array1 値の 1 つと一致しました。

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 に答える