0

次のコードを使用しています。

foreach ($_POST as $key => $value) {
    (preg_match("/^._box_(\d+)_5$/", $key, $matches));
    //$prodid[] = $matches[1];
    $firephp->log($matches, 'matches');
    };

このコードは、前のページから $_POST される次の情報に取り組んでいます。

array(
['clin'] =>
['clinmail'] =>
['quest_3'] =>
['quest_7'] =>
['quest_8'] =>
['quest_9'] =>
['quest_10'] =>
['quest_15'] =>
['quest_16'] =>
['hosp'] => 8
['user'] => 16
['a_box_15_5'] => 2
['a_box_16_5'] => 2
['b_box_1_5'] => '$0.00'
['b_box_29_5'] => 1
)

問題は、次の結果が得られることです。

matches: array()
matches: array()
matches: array()
matches: array()
matches: array()
matches: array()
matches: array()
matches: array()
matches: array()
matches: array()
matches: array()
matches: array('0'=>'a_box_15_5', '1'=>'15')
matches: array('0'=>'a_box_16_5', '1'=>'16')
matches: array('0'=>'b_box_1_5', '1'=>'1')
matches: array('0'=>'b_box_29_5', '1'=>'29')

最初の 11 の位置に一致させたくありません。私が探しているものと実際に一致する結果だけが欲しいのですが、この場合、最後の 4 つの $_POST は preg_match がすべきことではありませんか? どうすれば一致だけに制限できますか?

4

2 に答える 2

3

preg_match()正しく動作します: 一致がない場合は$matches空になります。しかし、一致がない場合でも、何か違うことをしているわけではなく、常に$firephp->log()、一致するかどうかを呼び出しています。

preg_match()1パターンが一致する場合、または0そうでない場合はエラーが発生した場合に返されるfalseため、それを使用して一致があるかどうかを確認し、次にのみ呼び出すことができます$firephp->log():

foreach ($_POST as $key => $value) {
    if (preg_match('/^._box_(\d+)_5$/', $key, $matches)) {
        $firephp->log($matches, 'matches');
    }
}
于 2012-11-23T20:40:33.250 に答える
1

ログに記録する前にチェックを追加します。

foreach ($_POST as $key => $value) {
    (preg_match("/^._box_(\d+)_5$/", $key, $matches));
    //$prodid[] = $matches[1];
    if(!empty($matches)){
        $firephp->log($matches, 'matches');
    }
};
于 2012-11-23T20:40:31.043 に答える