在php中不能正常工作

时间:2015-10-27 09:08:16

标签: php for-loop operators

我有字符串:

 $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

6 个答案:

答案 0 :(得分:1)

如果

,请使用&&代替||

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;
    }
}

答案 1 :(得分:1)

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

应该使用&amp;&amp;。

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件你好。

答案 2 :(得分:0)

使用此 -

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

OR

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

答案 3 :(得分:0)

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

这意味着如果该项目不是“clusterid”该项目不是“名称”该项目不是“电子邮件”等等< / p>

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

使用代替

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

答案 4 :(得分:0)

如果这是您的预期输出:

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的位置时才需要循环。

答案 5 :(得分:0)

问题是你用冒号(:)分割每个项目。 要获得您当前正在检查的值,您需要按空格分割第一部分(冒号前),然后取第二部分。

其他方面,这条线是:

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;
    }
}