1

2 つの配列のコンポーネントを比較する php 関数に取り組んでいます。配列内の各値の長さは、英単語 1 つだけです。場所がない。文字がありません。

配列 #1: 英語で最も一般的に使用される単語のリスト。$common_words_array

配列 #2: 小文字に変換され、句読点が取り除かれ、スペース (" ") を区切り文字として使用して爆発 () された、ユーザー生成の文。$study_array

$com_study 配列もあり、この場合、$study_array で "_" 文字に置き換えられる一般的に使用される単語の順序を追跡するために使用されます。

ネストされた for ループを使用すると、スクリプトが配列 #2 の各値を配列 #1 の各値と比較する必要があります。一致するもの (別名、一般的に使用される英語の単語) が見つかると、現在の問題とは関係のない別の魔法を実行します。

現時点では、PHP は 2 つの配列文字列値が等しい場合を認識しません。参照用に、ここで問題のある関数にコードを追加しています。問題を if ステートメントに限定するために、多くの不要な echo コマンドを追加しました。

誰かが私が見逃したものを見ることができますか? 同じアルゴリズムが Python でも完全に機能しました。

function create_question($study_array, $com_study, $common_words_array)
{
for ($study=0; $study<count($study_array); $study++)
    {
    echo count($study_array)." total in study_array<br>";
    echo "study is ".$study."<br>";

    for ($common=0; $common<count($common_words_array); $common++)
        {
        echo count($common_words_array)." total in common_words_array<br>";
        echo "common is ".$common."<br>";

        echo "-----<br>";
        echo $study_array[$study]." is the study list word<br>";
        echo $common_words_array[$common]." is the common word<br>";
        echo "-----<br>";

          // The issue happens right here.
          if ($study_array[$study] == $common_words_array[$common])
            {
            array_push($com_study, $study_array[$study]);
            $study_array[$study] = "_";
            print_r($com_study);
            print_r($study_array);
            }
        }
    }

    $create_question_return_array = array();
    $create_question_return_array[0] = $study_array;
    $create_question_return_array[1] = $com_study;

    return $create_question_return_array;
}

編集: 素晴らしいコーダーの提案で、if ステートメントを更新して、デバッグの目的でよりシンプルにしました。下記参照。ifステートメントをアクティブにしないという同じ問題がまだあります。

if (strcmp($study_array[$study],$common_words_array[$common])==0)
{
echo "match found";
//array_push($com_study, $study_array[$study]);
//$study_array[$study] = "_";
//print_r($com_study);
//print_r($study_array);
}

編集: bansi のリクエストで、関数を呼び出しているメイン インターフェイスのスニペットを次に示します。

$testarray = array();

$string = "This is a string";
$testarray = create_study_string_array($string);

$testarray = create_question($testarray, $matching, $common_words_array);

結果としては、空白の画面が表示されます。簡素化された echo ステートメントの出力「一致が見つかりました」が画面に表示されることを期待していますが、それは起こっていません。

4

5 に答える 5

1

(編集)分割関数が余分な空白を削除し(例:)preg_split("\\s+", $input)、入力が適切に正規化されていること(小文字、特殊文字の削除など)を確認してください。

于 2013-09-09T04:51:45.800 に答える
0

== の代わりに === を使用する

if ($study_array[$study] === $common_words_array[$common])

または、strcmpを使用することをお勧めします

 if (strcmp($study_array[$study],$common_words_array[$common])==0)
于 2013-09-09T04:47:57.880 に答える