PHP strpos() と strstr()

PHP で文字列が含まれるかどうかの判定で、Windows と Linux で挙動が違っていましたので、備忘録しておきます。
文字列が含まれるかどうかの判定は、strstr で行い、含まれる位置まで必要な場合は、strpos で行い、位置判定は型も判定する === と !== を使うべきで、 == は使わないことです。


<?php
	
function getColorConfig($spectxt) {

	$COLOR_CONFIG_D = "ff:ff:ff 00:86:00 cc:00:00";
	$COLOR_CONFIG_S = "ff:ff:ff e4:00:7f cc:00:00";


	if (strpos($spectxt, 'DEN ') !== false) {
  	  return $COLOR_CONFIG_D;
        }

	if (strpos($spectxt, 'SAN ') != false) {
          return $COLOR_CONFIG_S;
	}


	// 'SAN'で始まる文字列かどうかのチェック //
	/* Windows (Ver5.6) では意図したとおり動く 
         Linux (Ver7.1) では含まれてないと判定される 
         PHP の 0 は FALSE も意味するので
	*/
	if (strpos($spectxt, 'SAN ') == 0) {
          return $COLOR_CONFIG_S;
	}

	/* 試してないが、これは思った通りの動作をすると思う */
	if (strpos($spectxt, 'SAN ') === 0) {
          return $COLOR_CONFIG_S;
	}

	/* strpos() を strstr() に変更すれば、どちらでも意図した動作する */
	if (strstr($spectxt, 'DEN ')) {
          return $COLOR_CONFIG_D;
        }


	if (strstr($spectxt, 'SAN ')) {
          return $COLOR_CONFIG_S;
	}

} 

PHP 比較演算子 : http://php.net/manual/ja/language.operators.comparison.php

Qiita : https://qiita.com/kazu56/items/2c72d187438de07c2503

コメントを残す