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将以静默方式分配变量
$sth
?听起来像一个语句句柄(如perl中所示),它不是*sql\u query()
或类似的返回值,是吗?所有答案都是thanx,但在我重新检查sql db表后,我为它设置了错误的数据类型。我将char改为varchar,其中使用varchar时,它将固定长度,并在使用php处理时生成错误的值字符;-)不客气!请考虑使用CHAR而不是VARCHAR。如果一个表的所有属性在mySQL中都有一个静态长度,那么记录本身就有一个静态长度。这使得检索记录更快,因为DB引擎能够轻松地计算记录位于表文件中的位置。