Php 当打印输出清楚地显示字符串和常量相同时,为什么字符串和常量的比较不匹配?

Php 当打印输出清楚地显示字符串和常量相同时,为什么字符串和常量的比较不匹配?,php,loops,foreach,if-statement,Php,Loops,Foreach,If Statement,我在foreach和elseif中的PHP循环有问题,我的代码如下 foreach ($sth as $row) { $std_kal = $row['code_std']; if($std_kal == 'a') { $metode = 'A'; }elseif ($std_kal == 'b') { $metode = 'B'; }else{

我在
foreach
elseif
中的PHP循环有问题,我的代码如下

foreach ($sth as $row)
{
    $std_kal = $row['code_std'];

    if($std_kal == 'a') {           
        $metode = 'A';          
    }elseif ($std_kal == 'b') {         
        $metode = 'B';
    }else{          
        $metode = 'C';
    }

如果我运行此代码,它将显示
C
,但
$std_kal
的值是
a

$row['code\u std'的情况下,您的代码似乎是正确的
是一个字符串或字符,请尝试使用
'a'
以外的另一个值,比如
'b'
$metode
的值仍然
'C'
,然后您必须使用此语句
var\u dump($std\u kal)
检查
$std\u kal
的类型。它不是字符串或字符。

您的代码看起来没有问题

尽管如此,我还是建议采用这种风格:

foreach ($sth as $row) {

    $std_kal = $row['code_std'];

    switch( $std_kal ) {

      case 'a':
        $metode = 'A';          
        break;

      case 'b':
        $metode = 'B';
        break;

      default:
        $metode = 'C';
        break;

    } // switch

} // foreach 
还有一句话:不要写这个

if($std_kal == 'a') {   
我会这样写:

if( 'a' == $std_kal ) {   
或者更好的是:

if( 'a' === $std_kal ) {   
为什么?

  • 最后一次比较比较值和数据类型
  • 如果您无意中键入了=而不是==,则最后一个将显示错误。如果将变量保留在=,PHP将以静默方式分配变量

您是否尝试打印$std\u kal的值?是否可以在if之前再次检查var\u转储($std\u kal)?是否可以显示更多的周围代码?这似乎很好,你怎么知道它是“a”?只有当$std_kal是“a”时,才可以尝试“a”以外的其他东西使用“b”什么是
$sth
?听起来像一个语句句柄(如perl中所示),它不是
*sql\u query()
或类似的返回值,是吗?所有答案都是thanx,但在我重新检查sql db表后,我为它设置了错误的数据类型。我将char改为varchar,其中使用varchar时,它将固定长度,并在使用php处理时生成错误的值字符;-)不客气!请考虑使用CHAR而不是VARCHAR。如果一个表的所有属性在mySQL中都有一个静态长度,那么记录本身就有一个静态长度。这使得检索记录更快,因为DB引擎能够轻松地计算记录位于表文件中的位置。