PHP in_arrayは、最後の配列要素のみを検索しています

イアンY。

次のPHPコードは、複数行の文字列を配列に分解します。次に、3つのifステートメントを使用して、特定の行が配列に存在するかどうかを確認し、対応するテキストが存在する場合はエコーします。

$multiline_string = 'First line
Second line
Third line';

$array = explode("\n", $multiline_string);

if (in_array('First line', $array))
{
    echo 'First line exists.';
}

if (in_array('Second line', $array))
{
    echo 'Second line exists.';
}

if (in_array('Third line', $array))
{
    echo 'Third line exists.';
}

問題は、Third line exists.エコーされているだけであるということです。つまり、最初の行と2番目の行が配列に見つかりませんでした。

しかし、私はを使用してデバッグを行い、print_r($array)次の出力を取得しました。

Array
(
    [0] => First line
    [1] => Second line
    [2] => Third line
)

したがって、最初の行と2番目の行は配列に存在します。in_array関数がそれらを見つけられなかったのはなぜですか?

HappyDog

バックグラウンド

何が起こっているのかを理解するには、行末をテキストファイルでどのように表現するかに関して複数の規則があることを理解する必要があります。

  • Unix / Appleマシンで生成されたテキストファイルは、通常、単一の改行文字で行を区切ります\n
  • Windowsマシンで生成されたテキストファイルは、通常、キャリッジリターン+ラインフィードの2文字で行を区切ります\r\n
  • 非常に古いAppleマシンで生成されたテキストファイルは、通常、キャリッジリターン文字で行を区切ります\r実際にはめったに発生しないため、おそらくこれについて心配する必要はありません。

ウィキペディアには、これらのさまざまな標準の歴史を説明する優れた要約があります

あなたの問題

サンプルファイルはWindowsで作成されたように見えるため、各行の間に2文字あります。これは、最後の行を除く各行にいるときに、最後に非表示の文字が含まれることexplode()意味しますこれが、例で最後の行だけが一致する理由です。\n\r

ソリューション

複数行の文字列データの取得元に応じて、これにはいくつかの解決策があります。

状況が例に示されているとおりであり、文字列が制御するファイル内のリテラル文字列として定義されている場合、2つのオプションがあります。

  1. Unixスタイルの行末を使用するようにファイルを変換します。ほとんどのテキストエディタ/ IDEでは、メニューオプションを使用してこれを行うことができます。これを行う必要があるのは、ファイルごとに1回だけです(変更を加えて保存すると仮定します)。この変更を行うと、現在のコードはそのまま機能します。
  2. 使用するコードを更新して$array = explode("\r\n", $multiline_string);、Windowsの行末に基づいて爆発するようにします。

一方、データがユーザー入力からのものである場合は、両方のタイプの行末を処理するようにコーディングする必要があります1ここにもいくつかのオプションがあります。

  1. 分割を実行するコードが両方の行末スタイルを認識していることを確認してください。最も簡単な方法は、explode()呼び出しを$array = preg_split("/\r?\n/", $multiline_string)に置き換えることです。これは、\nまたはの任意のインスタンスで爆発します\r\n
  2. ある行末スタイルを別の行末スタイルに変換して、使用中の行末スタイルがわかるようにしてexplode()から、前と同じようにを使用しますたとえば、$multiline_string = str_replace("\r\n", "\n", $multiline_string);この方法は、後で文字列を使用して他のことを行う場合、たとえばデータベースに保存する場合に適しています。これは、すべての状況で両方の可能性を処理する必要がなく、これを1回だけ処理する必要があることを意味します。

1または、徹底したい場合は3つのタイプすべて。これは読者のための演習として残されています...

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

PHPでforeachループを使用しながら、配列の最後の要素を検索します

分類Dev

in_array() を使用した 2 つの値の PHP 検索配列列

分類Dev

PHP配列は、最後の配列項目のみを表示します

分類Dev

PHPのURL配列を検索し、最も近いURLを返します

分類Dev

PHP:要素が欠落している数値配列の最高のインデックスを検索します

分類Dev

PHP の in_array は本当に配列全体を調べますか?

分類Dev

Laravel phpは多次元配列の最後の要素を取得します

分類Dev

PHPの単純なhtmldomは、要素の後に要素を検索します

分類Dev

PHPのforループと配列:最後の相互作用でのみ要素を追加します

分類Dev

PHP: 配列内の文字列の最後の出現を検索

分類Dev

PHPは配列の最初の要素のみを取得します

分類Dev

PHP配列検索は複数のキーを返します

分類Dev

PHPを使用して連想配列の配列で値を検索します

分類Dev

PHPの配列で値の配列を検索します

分類Dev

PHP:連想配列から最後の2つの要素を除くすべてを削除します

分類Dev

配列PHPから最後の4つの要素を削除します

分類Dev

最後のphpの配列に要素をプッシュします

分類Dev

PHP配列POSTUPDATEは、最後の行にのみ影響します

分類Dev

PHP合計が指定された数に等しい配列から要素のペアを検索します

分類Dev

PHP:深い配列で要素を検索し、各親要素を変更します

分類Dev

すべての[{myvalue here}]を検索し、PHPの配列に配置します

分類Dev

配列をマージし、配列の最後の要素をphpのコンマで内破します

分類Dev

PHP array_push()が既存の配列要素を上書きしています

分類Dev

PHPの配列からすべての因子ペアを検索します

分類Dev

文字列のPHP配列は2つの要素のみを選択します

分類Dev

キーの配列から文字列を検索します。PHP

分類Dev

PHPは、別の配列から選択された要素に基づいて配列要素を削除します

分類Dev

検索値を持つarray_keys関数は、配列がphpの結果として空を返します(Foreachなし)

分類Dev

PHPを使用して、テキストファイル内の最後の行を検索します

Related 関連記事

  1. 1

    PHPでforeachループを使用しながら、配列の最後の要素を検索します

  2. 2

    in_array() を使用した 2 つの値の PHP 検索配列列

  3. 3

    PHP配列は、最後の配列項目のみを表示します

  4. 4

    PHPのURL配列を検索し、最も近いURLを返します

  5. 5

    PHP:要素が欠落している数値配列の最高のインデックスを検索します

  6. 6

    PHP の in_array は本当に配列全体を調べますか?

  7. 7

    Laravel phpは多次元配列の最後の要素を取得します

  8. 8

    PHPの単純なhtmldomは、要素の後に要素を検索します

  9. 9

    PHPのforループと配列:最後の相互作用でのみ要素を追加します

  10. 10

    PHP: 配列内の文字列の最後の出現を検索

  11. 11

    PHPは配列の最初の要素のみを取得します

  12. 12

    PHP配列検索は複数のキーを返します

  13. 13

    PHPを使用して連想配列の配列で値を検索します

  14. 14

    PHPの配列で値の配列を検索します

  15. 15

    PHP:連想配列から最後の2つの要素を除くすべてを削除します

  16. 16

    配列PHPから最後の4つの要素を削除します

  17. 17

    最後のphpの配列に要素をプッシュします

  18. 18

    PHP配列POSTUPDATEは、最後の行にのみ影響します

  19. 19

    PHP合計が指定された数に等しい配列から要素のペアを検索します

  20. 20

    PHP:深い配列で要素を検索し、各親要素を変更します

  21. 21

    すべての[{myvalue here}]を検索し、PHPの配列に配置します

  22. 22

    配列をマージし、配列の最後の要素をphpのコンマで内破します

  23. 23

    PHP array_push()が既存の配列要素を上書きしています

  24. 24

    PHPの配列からすべての因子ペアを検索します

  25. 25

    文字列のPHP配列は2つの要素のみを選択します

  26. 26

    キーの配列から文字列を検索します。PHP

  27. 27

    PHPは、別の配列から選択された要素に基づいて配列要素を削除します

  28. 28

    検索値を持つarray_keys関数は、配列がphpの結果として空を返します(Foreachなし)

  29. 29

    PHPを使用して、テキストファイル内の最後の行を検索します

ホットタグ

アーカイブ