【问题标题】:PHP - Check part of the string using substr() and then conditional - behaving strangePHP - 使用 substr() 检查部分字符串,然后有条件地检查 - 行为奇怪
【发布时间】:2014-05-08 17:28:56
【问题描述】:

首先,由于某些原因(例如字符串可以有多种类型),我不能在我的一个项目中使用explode() 函数。我得到一个字符串,如:“##% off”。所以要检查它是否是 THIS 类型的字符串,我想检查它是否包含单词“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/>'; }
?>

我不明白为什么会这样?

【问题讨论】:

  • 为什么不简单地使用正则表达式?

标签: php string substring


【解决方案1】:

因为$string1 = 05% off&lt;br/&gt; 所以当你在做substr() $firstsub 等于off&lt;br/&gt; 而不仅仅是off

你可以通过var_dump()看到这个

echo $string1 = '05% off'. '<br/>';
$firstsub = substr( $string1, 4 );
var_dump($firstsub); //results in string(8) "off<br/>"

要解决问题,您可以剥离 &lt;br/&gt;(如 ozmah 建议的那样)或将其添加到 if 测试中:

if( strtolower( $firstsub ) == 'off<br/>' )

实际上,如果您不需要将其分开,我会做什么,您可以简单地使用:

if(strpos(strtolower($string1),'off') !== false) { //your code }

这样就不需要substr()

【讨论】:

  • @AmalMurali 愿意解释一下您认为它不正确的原因吗?
  • 啊,你是对的。我的测试脚本中有错误的charset。如果您编辑答案,我可以删除我的反对票。 :)
  • 这里的问题是@AmalMurali 认为 php 中的“
    ”被解释为 PHP 代码中的空格。我完全同意您的观点,Pitchinnate 认为问题在于字符串后添加的“
    ”。
  • @Ozmah:确实,这是我的一个错误。赞成这个答案来补偿! ;-)
  • 虽然,我认为这里可能需要一个正则表达式。您可以删除所有 substr() 调用并仅使用一个 if (preg_match(...)) 并完成它。
【解决方案2】:

通过 substr 你会得到类似 "off&lt;br/&gt;" 的东西,而不是你需要的东西:

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

试试这个只获得“关闭”字:

$firstsub = substr( $string1, 4, 3 );

【讨论】:

    【解决方案3】:

    像这样添加&lt;br&gt;

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

    对我来说 trim() 不起作用

    【讨论】:

      猜你喜欢
      • 2017-07-07
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 2016-05-08
      • 2018-10-10
      • 1970-01-01
      相关资源
      最近更新 更多