0

テキストフィールドからのユーザー入力から複数の値を取得しようとしていますが、if条件ステートメントを展開または追加し続けたい

これが私のコードです

foreach ($list['post'] as $item) {
    if( ($item['single']['catid'] != 8) AND ($item['single']['catid'] != 4) ){ 
        $this->list_post($item); 
    }
}

今私が探しているのは、if( ($item['single']['catid'] != 8) AND ($item['single']['catid'] != 4) )ユーザーが複数のカテゴリIDを追加できるようにしたいことです。各IDはAND、さらにIDコードを追加します。AND ($item['single']['catid'] != 4)

私はこれまでこれを行ったことがなく、これが適切な方法であるか、他の可能なより良い方法であるかを知りません。

どうもありがとう

4

3 に答える 3

1

in_array()さまざまな可能性に対して値をチェックする方がよい場合があります。

于 2012-11-05T16:59:28.937 に答える
1

私はあなたの問題を理解しているかどうかわかりません。ユーザーがさまざまな値を入力できるようにする必要があります。例:

$string = "5, 6, 7, 8, 10";

その後、「catid」がその配列に含まれていないかどうかを確認し、含まれていない場合は$ this-> list_post($ item);を実行します。

もしそうなら、あなたはこのようなものを使うべきです:

$values = explode(", ", $string); //make array from values
foreach ($list['post'] as $item) {
    if (!in_array($item['single']['catid'], $values)) { //check whether catid is in array
        $this->list_post($item); // execute whatever you want
    }
}

それが役に立てば幸い。

于 2012-11-05T17:07:08.440 に答える
1

確認したいカテゴリIDの配列のようなものが必要です。次に例を示します。

$categories = array(8, 4);

in_array(needle, haystack)次に、PHPの組み込み関数のようなものを使用できます。

あなたのif条件はそのようになります:if (!in_array($item['single']['catid'], $categories)) {

上記を使用する必要がありますが、より複雑な問題の原則を理解できるように、それがどのように機能するかについて説明します。

function examples($ target、$ array){foreach($ array as $ element){//配列内の各要素を調べますif($ element == $ target){//要素があるかどうかを確認しますtrueを返すことを探しています。//存在することをtrueに返し、そこで停止します。}else{//無視してください...}}returnfalse; //ここに到達した場合、trueが返されないことを意味するため、存在しません...}

として使用されif (exists($item['single']['catid'], $categories)) {ます。

ifステートメントが存在するかどうかを評価する前に何らかの処理を行う必要があるため、ifステートメントの「内部」にある場合は機能しません。したがって、ifステートメントの前にそれを実行して結果を変数に格納するか、関数(PHPが提供する)を使用することができます。

うまくいけば、コンセプトはあなたがより複雑な問題を解決するのに役立つでしょう...

:これは、入力が配列の形式であることを前提としています。配列は、直接提供されていない場合でも、さまざまな方法で作成できます。

更新

入力フィールドを介して取得した入力は、フォームを介して送信されます。フォームには、メソッドとしてPOSTまたはGETのいずれかを指定します。使用しているのがPOSTであるとすると、テキストフィールドに入力されたとおりに入力を文字列として取得する方法は次のとおりです。

$categories_string = $_POST['the_name_field_in_the_input_tag'];

その後、それをアイテムのリストとして理解する必要があります。たとえば、コンマで区切ってください1,3,5,8。次に、これは単にコンマで区切ることです。を使用できますexplode($delimiter, $string)。そのように:

$categories_array = explode(',', $_POST['categories']);

ただし、入力を信頼できないため、のようなものを取得できます1, 2, 3,5,6。あなたは周りにスペースがあるので、スペースはそれを台無しにします。それらを削除するにはtrim、たとえばを使用できます。

$categories = array(); // Create the array in which the processed input will go
foreach ($categories_array as $c) { // Go through the unprocessed one
    $categories[] = trim($c) * 1; // Process it, and fill the result. The times one is just so that you get numbers in the end and not strings...
}

次に、前に示したように使用できますが、これは単なる例であり、これらすべての手順が必要なわけではなく、この入力を処理するためのはるかに効率的な方法(正規表現など)があることに注意してください。ただし、ここでの懸念は入力のサニタイズではありませんが、最終的にはサニタイズする必要があることに注意してください。

それが十分に明確であることを願っています:)

于 2012-11-05T17:08:09.713 に答える