【问题标题】:if else condition not working with array values in phpif else 条件不适用于 php 中的数组值
【发布时间】:2013-01-29 05:45:03
【问题描述】:

我遇到了这个奇怪的问题。

我正在从数组中获取值并尝试比较它,但它不起作用。

代码 1

<?php
echo $data->item[0]['promocode'].'<br>';
echo $data->item[1]['promocode']; 
?>

输出 1

inhouse
inhouse 

现在让我们尝试 if else 条件,如果两个值相同或不同 代码2

<?php
if(($data->item[0]['promocode']) == ($data->item[1]['promocode'])){
echo "both values are same";
} else {
echo "both values are NOT same";
}?>

输出 2

both values are NOT same 

很奇怪

我不明白我做错了什么。

让我们试试上面的例子,指定变量 代码 3

<?php
$data0=$data->item[0]['promocode'];
$data1=$data->item[1]['promocode'];
if($data0 == $data1){
echo "both values are same";
} else {
echo "both values are NOT same";
}?>

输出 3

both values are NOT same 

我现在正在抓狂。


现在在变量中硬编码值

代码 4

<?
$data0='inhouse';
$data1='inhouse';
if($data0 == $data1){
echo "both values are same";
} else {
echo "both values are NOT same";
}?>

输出 4

both values are same 

所以我的问题是为什么会这样?

我有一个元素数组,如果尝试然后做某事,我想用当前值检查以前的值。

感谢您的宝贵时间。

【问题讨论】:

  • 提示:if (strlen($data0=$data-&gt;item[0]['promocode']) == strlen($data0=$data-&gt;item[1]['promocode']))的结果是什么
  • 试试=== 而不是==
  • === 不是比== 更强大,限制更多,所以当== 给出false 时,=== 肯定也会给出false 吗?只是想看看我是否理解正确。
  • 确实似乎有一个尾随空格,如此处所示i49.tinypic.com/1ffmrr.jpg

标签: php if-statement conditional-statements


【解决方案1】:

假设两个条目都是字符串(如您的第一个代码示例所示),我的猜测是您的条目具有不相等的前导和/或尾随空格。尝试先对它们进行归一化,例如

if (trim($data->item[0]['promocode']) == trim($data->item[1]['promocode']))

要查看发生了什么,请尝试将您的第一个示例修改为

<?php
    printf('<pre>"%s"%s"%s"</pre>',
        $data->item[0]['promocode'],
        PHP_EOL,
        $data->item[1]['promocode']);
?>

【讨论】:

    【解决方案2】:

    这样试试

    <?php
       if(($data->item[0]['promocode']) === ($data->item[1]['promocode'])){
         echo "both values are same";
       } else {
         echo "both values are NOT same";
       }
    ?>
    

    或者你可以使用

    strcmp($data->item[0]['promocode'],$data->item[1]['promocode']);
    

    【讨论】:

    • identical 运算符只会使比较更有可能失败。 strcmp() 不会产生与 == 不同的结果
    • 我认为 strcmp 更适用于字符串功能正确..??您的修剪可能会删除空格并且可能会删除其他空格,但提问者要求比较...
    • 不,strcmp() 会给你两个字符串之间的 差异 作为一个数字(0 表示相等)。使用它来确定相等性与$a == $b 没有什么不同
    • 是的,那么你可以使用 if(strcmp(str1,str2) == 0) 那么它们是相等的,否则不是......即使它也确定了“案例”
    • 正如已经指出的那样,strcmp($str1, $str2) == 0 不会产生与$str1 == $str2 不同的结果
    【解决方案3】:

    我也使用 strlen($var) 进行调试...

    <?php
    if( strlen($data->item[0]['promocode']) == strlen($data->item[1]['promocode']) ){
      if(($data->item[0]['promocode']) == ($data->item[1]['promocode'])){
        echo "both values are same";
      }
      else {
        echo "both values are NOT same";
      }
    }
    else{
     echo 'ther are different because 
     strlen($data->item[0]["promocode"]='.strlen($data->item[0]['promocode']).' and 
     strlen($data->item[1][|promocode"]) = '. strlen($data->item[1]['promocode']);
    }
    ?>
    

    【讨论】:

      【解决方案4】:

      尝试使用非类型转换条件语句 === 来查看它们是否是同一类型。 或者为了调试目的显示变量类型以确保您不会意外地有一些 NULL 对象或其他奇怪的数据类型。

      if($data0 !== $data1) echo gettype($data0).' !== '.gettype($data1);
      

      这应该可以帮助您找出您实际比较的内容。另一种选择是使用var_dump($data); 来实际显示所有变量。查看数据类型是否存在差异。它应该可以帮助您确定您的对象是否实际填充正确。

      【讨论】:

        猜你喜欢
        • 2020-05-22
        • 1970-01-01
        • 2015-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-25
        • 1970-01-01
        相关资源
        最近更新 更多