【PHP】in_array()の使い方と注意点

このQ&Aのポイント
  • phpのin_array()は、指定した値が配列に存在するかどうかを判定する関数です。しかし、いくつかの注意点があります。
  • まず、in_array()は配列内の値を比較するため、配列が正しく準備されていない場合には正しい結果が得られません。
  • また、ファイルから読み込んだ配列をin_array()で比較する場合、改行文字などが含まれる可能性があるため、注意が必要です。
回答を見る
  • ベストアンサー

phpのin_array()でわからない事があります。

phpのin_array()でわからない事があります。 $str = array('リンゴ','オレンジ','バナナ'); if(in_array("オレンジ",$str)){ print "OK"; }else{ print "NG"; } 結果:OK 上記は何の問題もないのですが、 $str = @file('hoge.txt'); if(in_array("オレンジ",$str)){ print "OK"; }else{ print "NG"; } 結果:NG // hoge.txt リンゴ オレンジ バナナ こうするとNGになってしまいます。 最近PHPを始めたばかりで根本的な事がわかってないのかも知れませんが、 もし原因をご存じの方がいれば教えていただけないでしょうか。 すみませんがよろしくお願いいたします。

  • PHP
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

可能性としては2つ ひとつは改行文字の問題 http://www.php.net/manual/ja/function.file.php var_dump($str); してみるとわかりますが、バイト数が想定より大きくなっているようなら改行文字が 入っています。 基本的にはFILE_IGNORE_NEW_LINESを指定すると解決します。 もうひとつは文字コードの問題、 テキストファイルとプログラムファイルの文字コードが一致しないと話になりません。 また、fileでやるよりもう少し厳密にfopenしてfreadして・・・という プログラム的なI/Oを心がけた方がミスがへります

その他の回答 (1)

  • yamada59
  • ベストアンサー率74% (29/39)
回答No.1

file 関数はデフォルトでは改行コードを含むのが原因です。 $str = @file('hoge.txt', FILE_IGNORE_NEW_LINES); とするといいと思います。

参考URL:
http://php.net/manual/ja/function.file.php

関連するQ&A

  • PowerShell で bash の awk 的な事

    PowerShellで下記のコマンドと同じような事がしたいです。 どのたかご教示ください。 awk '{print $1}' hoge.txt awk -v str="${hoge}" '{if($1==str) print $0}' hoge.txt awk '{print length($1)}' ヒントでも構いません、 よろしくお願い致します。

  • phpで 変数の中にデータが入っているかどうかを判別する

    phpで変数の中が空なら・・・ という命令を書く場合 if($hoge == "")とか if(isset($hoge)) という風に書くとおもうんですが、 変数の中身が配列で、その配列の一つでもデータが入っているかどうかを 判別する方法はないのでしょうか? 例えば、 $hoge = array([1] = りんご,[2] = )  と  $hoge = array([1] = ,[2] = ) で、表示結果を変えたいということです。 配列を一旦分解するしかないのでしょうか?

    • ベストアンサー
    • PHP
  • PHPで配列から値を取得したい

    PHP勉強中の初心者です。 初歩的な質問なのですが以下のような配列から「りんご」、「バナナ」などの値をすべて取得するにはどうすればいいのでしょうか? Array ( [input] => 自転車 [status] => 0 [result] => Array ( [0] => Array ( [0] => りんご ) [1] => Array ( [0] => バナナ ) [2] => Array ( [0] => ミカン ) [3] => Array ( [0] => オレンジ ) [4] => Array ( [0] => ブドウ ) [5] => Array ( [0] => パイナップル ) ) )

    • ベストアンサー
    • PHP
  • PHP3で・・・

    $str1 = "加藤伊藤鈴木佐藤神田"; $str2 = "鈴木" if(****($str2, $str1)){ print "鈴木発見!!"; }else{ print "鈴木がいない・・・"; } 上記(****)に当てはまる関数(PHP3)は何がありますか? strposとか試したんですけど、うまくいかなかったです・・・

    • ベストアンサー
    • PHP
  • 配列の要素(value)に、変数を格納するのはダメ??

    PHP5の環境で作業をしています。 $apple = "りんご"; $orange = "みかん"; $banana = "バナナ"; $array_test = array("$apple","$orange""$banana"); print_r($array_test); /*------------- 結果: Array ( [0] => りんご [1] => みかん [2] => バナナ ) -------------*/ すごく初歩的なことをお聞きしているかもしれませんが、 配列の要素に「変数」を入れるのはダメでしたでしょうか? 検索して探してみても、なかなか出てこないので…。 (検索の仕方が悪いだけでしょうか。) 意外に見つからないので、驚いています。 実際、上のコードで試すと、問題なく希望通りの結果を返してくれます。 でも、これは、作法的にはよろしくないのでしょうか?

    • ベストアンサー
    • PHP
  • array_searchを使って外部ファイルから目的のキーを取得したい

    array_searchを使って外部ファイルから目的のキーを取得したいのですが どうしてもFALSEを返されてしまいます。 以下が構文です。 <?php $file = file_get_contents("arr.php"); $arr =explode("\n",$file); $delstr="DEF"; $hoge = in_array($delstr,$arr,1); if($hoge !== false){ array_splice($arr,$hoge,1); } var_dump($hoge); print_r($arr); ?> 3日くらい悩んでいます。 どうかご教授よろしくお願い致します。

    • 締切済み
    • PHP
  • array_mapの再帰処理がうまく行かない

    長文で失礼します。 array_mapでの再帰処理がうまく行かないのでどこが間違っているか教えてください。 まず、このような配列があります。配列の中に配列があります。 $ary = array(1, 2, null, array("a", null, "c")); この配列の中のnullを"なし"という文字列に変換したいです。 array_mapを使って再帰的にやってみました。 まずはうまく行ったコードから。 ------------------------------------------------------ $ary = array(1, 2, null, array("a", null, "c")); var_dump(null2Nashi($ary)); // nullを"なし"に置換する関数 function null2Nashi(  $in_array ){  if(is_array($in_array)){   return array_map("null2Nashi", $in_array);  } else {   if ($in_array === null){    $in_array = "なし";   }   return $in_array;  } } ------------------------------------------------------ 結果はnullが"なし"に変換されました array (size=4)  0 => int 1  1 => int 2  2 => string 'なし' (length=6)  3 =>   array (size=3)    0 => string 'a' (length=1)    1 => string 'なし' (length=6)    2 => string 'c' (length=1) そしてこの"なし"をコード内で指定するのではなく引数で指定したいと思って無名関数を使って以下のコードにしました。 ------------------------------------------------------ $ary = array(1, 2, null, array("a", null, "c")); var_dump(null2Str($ary, "なし")); // nullを指定文字列に置換する関数 function null2Str(  $in_array, // null値を含む配列  $in_str // null値を変換したい文字列 ){  $n = function($n_array) use($in_str){   if(is_array($n_array)){    return array_map($n, $n_array); //…(1)   } else {    if ($n_array === null){     $n_array = $in_str;    }    return $n_array;   }  };  return $n($in_array); } ------------------------------------------------------ 結果はnullは何も変換されませんでした。 array (size=4)  0 => int 1  1 => int 2  2 => null  3 =>   array (size=3)    0 => string 'a' (length=1)    1 => null    2 => string 'c' (length=1) どうやら(1)のarray_mapが動作していないようです。要素を分解せずに$nの無名関数に渡さずにそのまま第2引数を返しているだけみたいです。 何か対応方法があるでしょうか? どうぞよろしくお願い致します。

    • ベストアンサー
    • PHP
  • array_fill について php

    <?php $a = array_fill(-2, 4, 'pear'); print_r($a); ?> Array ( [-2] => pear [0] => pear [1] => pear [2] => pear ) 出力結果なのですが、配列で[-1]がないのはなぜでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • in_array関数について

    in_array関数についての質問です。 下記のように$data_baseにある値が入っているかどうかを調べて、処理を実行するようなものを書きました。 $data_baseに東北地方の県名が入っているかどうかを調べるものです。 $data_base = array('青森県', '岩手県'); $prefecture[tohoku] = array('青森県', '岩手県', '宮城県', '秋田県', '山形県', '福島県'); $prefecture[kanto] = array('茨城県', '栃木県', '群馬県', '埼玉県', '千葉県', '東京都', '神奈川県'); //パターン1 if(in_array($prefecture[tohoku], $data_base)){ $output .= "東北地方"; } //パターン2 if(in_array(array('青森県', '岩手県', '宮城県', '秋田県', '山形県', '福島県'), $data_base)){ $output .= "東北地方"; } //パターン3 if(in_array('青森県'), $data_base)){ $output .= "東北地方"; } しかし、パターン1とパターン2はif文の中の処理が実行されず、パターン3のみ実行出来ました。 エラー文などは出ていないので構文自体は間違いないと思うのですが…。 パターン2についてはここを見ました。 http://search.net-newbie.com/php/function.in-array.html PHPのVersionは5.2.6です。 in_array関数については色々調べてみたのですがどうしてもわかりません。 他の方法や、間違っている場所などありましたらよろしくお願いします。

    • ベストアンサー
    • PHP
  • arrayの中で、ループを使った採番など。

    前回の続きになるのですが、下記の様に、arrayを複数にすると動かなくなります。 何が間違っているのでしょうか? $url = array(); for($i = 1; $i <= 42; $i++) { $seminar = "http://www.hoge.com/seminar/".sprintf("%04d", $i).".html"; $url[] = $seminar; } $test = array( "http://www.hoge.com/seminar/0043_01.html" "http://www.hoge.com/seminar/0043_02.html" ); $array = array($url, $test); $myUrl = "http://www.hoge.com/seminar/0045.html"; if(in_array($myUrl, $array)){ echo "配列に".$myUrl."は存在します。"; } else { echo "配列に".$myUrl."は存在しません。"; }

    • ベストアンサー
    • PHP