Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-使用substr()检查字符串的一部分,然后使用条件-行为奇怪_Php_String_Substring - Fatal编程技术网

PHP-使用substr()检查字符串的一部分,然后使用条件-行为奇怪

PHP-使用substr()检查字符串的一部分,然后使用条件-行为奇怪,php,string,substring,Php,String,Substring,首先,由于某些原因(例如字符串可以有多种类型),我不能在我的一个项目中使用explode()函数。我得到的字符串是:“##%off”。所以为了检查它是否是这种类型的字符串,我想检查它是否包含单词“off”。我试图使用子字符串来获取字符串的尾部,然后我感到惭愧,它总是给我答案“不” 我正在测试这个: <?php echo $string1 = '05% off'. '<br/>'; echo $string2 = '03% Off'. '<br/>'; echo $s

首先,由于某些原因(例如字符串可以有多种类型),我不能在我的一个项目中使用
explode()
函数。我得到的字符串是:“##%off”。所以为了检查它是否是这种类型的字符串,我想检查它是否包含单词“off”。我试图使用子字符串来获取字符串的尾部,然后我感到惭愧,它总是给我答案“不”

我正在测试这个:

<?php
echo $string1 = '05% off'. '<br/>';
echo $string2 = '03% Off'. '<br/>';
echo $string3 = '50% OFF'. '<br/>';
echo $string4 = '50% oFf'. '<br/>';
echo '<hr/>';
echo $firstsub = substr( $string1, 4 );
echo $secondsub = substr( $string2, 4 );
echo $threesub = substr( $string3, 4 );
echo $foursub = substr( $string3, 4 );
echo '<br/>';
echo substr( $string1, 0, 2 ) . '<br/>';
echo substr( $string2, 0, 2 ) . '<br/>';
echo substr( $string3, 0, 2 ) . '<br/>';
echo substr( $string4, 0, 2 ) . '<br/>';
echo '<hr/>';
echo '<h2>TESTING</h2>';
if( strtolower( $firstsub ) == 'off' ) { echo "Yes" . '<br/>'; } else { echo "No" . '<br/>'; }
if( strtolower( $secondsub ) == 'off' ) { echo "Yes" . '<br/>'; } else { echo "No" . '<br/>'; }
if( strtolower( $threesub ) == 'off' ) { echo "Yes" . '<br/>'; } else { echo "No" . '<br/>'; }
if( strtolower( $foursub ) == 'off' ) { echo "Yes" . '<br/>'; } else { echo "No" . '<br/>'; }
?>


我不明白为什么会发生这种情况?

因为
$string1
=
05%的折扣
所以当你做
substr()时,
等于
off
不仅仅是
off

如果执行
var\u dump()


不需要这样的
substr()

因为
$string1
=
05%的折扣
所以当你做
substr()
$firstsub
时等于
off
而不仅仅是
off

如果执行
var\u dump()


这样就不需要
substr()

通过substr,您可以得到类似
“off
的东西,而不是您需要的东西,因为:

$string1 = '05% off'. '<br/>'

通过substr,您将获得类似于“off
的东西,而不是您需要的东西,因为:

$string1 = '05% off'. '<br/>'

像这样添加

echo $string1 = '05% off';
echo $firstsub = substr( $string1, 4 );
$string1.='<br/>';
echo$string1='05%折扣';
echo$firstsub=substr($string1,4);
$string1.='
';

对我来说,
trim()
不起作用

像这样添加

echo $string1 = '05% off';
echo $firstsub = substr( $string1, 4 );
$string1.='<br/>';
echo$string1='05%折扣';
echo$firstsub=substr($string1,4);
$string1.='
';

对我来说,
trim()
不起作用了

@AmalMurali想解释一下为什么你认为它不正确吗?啊,你是对的。我的测试脚本中有错误的
字符集。如果您编辑答案,我可以删除我的否决票。:)这里的问题是@AmalMurali认为php中的“
”被解释为php代码中的空白。我完全同意你的看法,问题是字符串后面加了“
”。@Ozmah:的确,这是我的错误。向上投票这个答案来补偿!;-)不过,我认为这里可能需要一个正则表达式。您可以删除所有的
substr()
调用,只使用一个
if(preg\u match(…)
并完成它。@AmalMurali想解释一下为什么您认为它不正确吗?啊,您是对的。我的测试脚本中有错误的
字符集。如果您编辑答案,我可以删除我的否决票。:)这里的问题是@AmalMurali认为php中的“
”被解释为php代码中的空白。我完全同意你的看法,问题是字符串后面加了“
”。@Ozmah:的确,这是我的错误。向上投票这个答案来补偿!;-)不过,我认为这里可能需要一个正则表达式。您可以删除所有
substr()
调用,只使用一个
if(preg_match(…)
并完成它。为什么不简单地使用正则表达式?为什么不简单地使用正则表达式?
$firstsub = substr( $string1, 4, 3 );
echo $string1 = '05% off';
echo $firstsub = substr( $string1, 4 );
$string1.='<br/>';