不等于 php 不工作

Not Equal to in php not working

我有字符串:

 $food="7:1,address:mandakini Pune,clusterid:1,email:s@gmail.com,mobile:950389,name:san,valid_order_id:FD1445853852";

我使用 $items = explode ( ",", $food );
用 ',' 拆分了这个字符串 当我试图像

一样阅读它时
for($i=0;$i < sizeof($items);$i++){
    $jsonval= $items[$i];

    $inneritems = explode ( ":", $jsonval );
    $item1=$inneritems[0];
    $item2=$inneritems[1];

    echo '<br/>items '.$item1.":".$item2.'<br/>';
    if($item1 !="clusterid" || $item1!="name" || $item1!="email" || $item1!="mobile" || $item1!="address" || $item1!="valid_order_id"){
        echo 'hello '.$item1.":".$item2;
    }
}

我得到以下输出:

 items 7:1 
 hello 7:1
 items address:mandakini Pune
 hello address:mandakini Pune
 items clusterid:1
 hello clusterid:1
 items email:s2@gmail.com
 hello email:s@gmail.com
 items mobile:950389
 hello mobile:950389
 items name:san
 hello name:san 
 items valid_order_id:FD1445853852
 hello valid_order_id:FD1445853852'

我的预期输出是:

items 7:1
 hello 7:1

使用这个 -

if($item1 == 7 && $item2 == 1){
    echo 'hello '.$item1.":".$item2;
}

if($item1 !="clusterid" && $item1!="name" && $item1!="email" && $item1!="mobile" && $item1!="address" && $item1!="valid_order_id"){
    echo 'hello '.$item1.":".$item2;
}
if($item1 !="clusterid" || $item1!="name" || $item1!="email" || $item1!="mobile" || $item1!="address" || $item1!="valid_order_id"){
        echo 'hello '.$item1.":".$item2;
    }

这意味着如果该项目不是 "clusterid" OR 则该项目不是 "name" OR该项目不是 "email" 等

例如,如果项目是 "clusterid",则第一个条件为假,但第二个条件为真 - 因为您使用了 操作数它将满足真实条件。

使用代替:

if($item1 !="clusterid" && $item1!="name" && $item1!="email" && $item1!="mobile" && $item1!="address" && $item1!="valid_order_id"){
        echo 'hello '.$item1.":".$item2;
    }

在 if

中用 && 代替 || 试试这个

Onlie Demo

$food="7:1,address:mandakini Pune,clusterid:1,email:s@gmail.com,mobile:950389,name:san,valid_order_id:FD1445853852";
 $items = explode ( ",", $food );
 for($i=0;$i < sizeof($items);$i++){
    $jsonval= $items[$i];

    $inneritems = explode ( ":", $jsonval );
    $item1=$inneritems[0];
    $item2=$inneritems[1];

    // echo '<br/>items '.$item1.":".$item2.'<br/>';
    if($item1 !="clusterid" && $item1!="name" && $item1!="email" && $item1!="mobile" && $item1!="address" && $item1!="valid_order_id"){
        echo '<br/>items '.$item1.":".$item2.'<br/>';
        echo 'hello '.$item1.":".$item2;
    }
}

如果这是您的预期输出:

items 7:1
hello 7:1

您可能会考虑让您的代码更具可读性:

$filter = ['clusterid', 'name', 'email', 'mobile', 'address', 'valid_order_id'];
$items = explode(',', $food);

foreach($items as $value) {
    $innerItems = explode (':', $value);

    if (!in_array($innerItems[0], $filter)) {
        echo 'items ' . $innerItems[0] . ':' . $innerItems[1] . '<br>'
           . 'hello ' . $innerItems[0] . ':' . $innerItems[1] . '<br>';
    }    
}

使用in_array似乎比长逻辑表达式更容易维护和更好阅读。另请注意,仅当未确定值 7:1 的位置时才需要循环。

if($item1 !="clusterid" || $item1!="name" || $item1!="email" || $item1!="mobile" || $item1!="address" || $item1!="valid_order_id"){
    echo 'hello '.$item1.":".$item2;
}

应该使用&&。

if($item1 !="clusterid" && $item1!="name" && $item1!="email" && $item1!="mobile" && $item1!="address" && $item1!="valid_order_id"){
    echo 'hello '.$item1.":".$item2;
}

实际上,如果您想要准确的输出,您应该将

echo '<br/>items '.$item1.":".$item2.'<br/>';

也在if里面。现在你将获得7个物品和1个你好。

问题是您用冒号 (:) 分隔了每个项目。 要获得您当前正在检查的值,您还需要将第一部分(冒号之前)拆分为 space,然后取第二部分。

否则该行是:

items clusterid

而不是

clusterid

这就是您要检查的内容。

此外,将第一个 echo 移到 if 语句中。

试试这个:

for($i=0; $i < sizeof($items); $i++){
    $jsonval= $items[$i];

    list($item1, $item2) = explode(":", $jsonval);
    list($part1, $part2) = explode(" ", $item1);
    $badArray = array('clusterid', 'name', 'email', 'mobile', 'address', 'valid_order_id');

    if(!in_array($part2, $badArray)){
        echo '<br/>items '.$item1.":".$item2.'<br/>';
        echo 'hello '.$item1.":".$item2;
    }
}