3

配列内の値Event Idを、配列内の ( idEvent ) に$fieldsマップされている値に置き換えようとしていますが、PHP の関数が間違った位置を返しています。注:値をすべて小文字に変換しているため、一致が返されるはずです。インデックスを返しているように見えますが、配列の3番目の値であるため、インデックスではなくインデックスを返す必要があります。$aliasesarray_searcharray_search21$fields

残念ながら、コードを実行すると (たとえば、コピーしてここに貼り付けます: http://writecodeonline.com/php/ )、間違った値が返されます。私が何か間違ったことをしている場合、誰かが私に教えてもらえますか?

$fields = array('Host', 'OS', 'Event Id');
$aliases = array('idEvent' => 'Event ID');

 foreach ($aliases as $actual => $alias){

    $alias = strtolower($alias);

    echo "searching fields(" . implode(',', array_map('strtolower', $fields)) . ") for $alias<br/>";
    if ($position = array_search($alias, array_map('strtolower', $fields)) !== FALSE) {

        echo "$alias was found at \$fields[$position]";
        $fields[$position] = $actual;

    }
}

編集:私がやろうとしていることをできるように、いくつかのエコーステートメントを追加しました。

4

3 に答える 3

6

if問題なのは、ステートメントの操作の順序です。代入演算子は比較演算子よりも優先順位が低く、代入は右から順に評価されます。したがって、括弧を追加します。

if (($position = array_search($alias, array_map('strtolower', $fields))) !== FALSE) {

これは読みやすいと思います:

if (in_array($alias, array_map('strtolower', $fields))) {
于 2013-08-08T13:52:23.170 に答える
0

$positionあなたの比較の結果であるため、1の割り当てられた値を取得していますarray_search to !== FALSE

左側のテストを使用して問題を修正してください。

if (false !== ($position = array_search($alias, array_map('strtolower', $fields)))) {

        echo "$alias was found at {$fields[$position]}";
        $fields[$position] = $actual;

    }
于 2013-08-08T13:57:55.503 に答える