如果条件不能在PHP中工作

时间:2011-12-12 17:49:35

标签: php if-statement

for($i=0;$i<=count($photoData['data'])-1;$i++){
    echo $id = $photoData['data'][$i]['tags']['data'][0]['id'];
    $id2 =  $photoData['data'][$i]['tags']['data'][1]['id'];
    if($id == $fbID){
        $photos .= "<div style='float:left;margin:25px;'><a href='crop.php?url=".$photoData['data'][$i]['source']."'><img src='".$photoData['data'][$i]['picture']."'/></a></div>";
    }else{
        $photos = 'We cant find any photo tagged with you, go back and select another album';
    }
}

此处$photoData是一个数组,$fbID是Facebook用户ID。

我只打印与$id匹配的$fbID,但未输入if条件。

我还使用$id检查变量($fbIDgettype())类型。这两个变量只是相同的类型字符串。但它并不匹配。

任何人都可以帮我解决吗?

提前谢谢。

3 个答案:

答案 0 :(得分:2)

在获得代码盲时,您错过的一个简单错误的完美示例。

第二行

echo $id = $photoData['data'][$i]['tags']['data'][0]['id'];

应该是

/* assign value to variable */
$id = $photoData['data'][$i]['tags']['data'][0]['id'];

/* if you really wanted that, echo the variable AFTER it is assigned */
echo($id);

因为它更干净。

<强>更新

使用

var_dump($id);
var_dump($fbID);

并查看结果。如果一个(或两个)说出类似

的内容
 string(9)

它表明变量包含一个字符串,而不是一个整数。要正确比较字符串,您必须更改

 if($id == $fbID){

 if($id === $fbID){

甚至失败(确保他们的字符串)

 if(''.$id === ''.$fbID){

希望有所帮助。

更新2

我不确定它是否有意,但

$photos = 'We cant

也可能是

$photos .= 'We cant

因为很容易错过一个点。但这取决于你的其余代码。 ;)

答案 1 :(得分:1)

以下一行看起来很奇怪:

  echo $id = $photoData['data'][$i]['tags']['data'][0]['id'];

尝试将其更改为:

  // assignment
  $id = $photoData['data'][$i]['tags']['data'][0]['id'];
  // print statement
  echo $id;

修改

您还可以尝试从两个变量中删除任何尾随空格:

  if(trim($id) == trim($fbID)){
        $photos .= "<div style='float:left;margin:25px;'><a href='crop.php?url=".$photoData['data'][$i]['source']."'><img src='".$photoData['data'][$i]['picture']."'/></a></div>";
    }else{
        $photos = 'We cant find any photo tagged with you, go back and select another album';
    }

答案 2 :(得分:0)

[编辑]

所选答案提供了大量错误信息。我有一个问题,理解如何使比较更严格使代码工作。你认为恰恰相反。

PHP手册:

$a == $b    Equal   TRUE if $a is equal to $b after type juggling.
$a === $b   Identical   TRUE if $a is equal to $b, and they are of the same type. (introduced in PHP 4)

我仍然支持我的答案 - 我认为我走在正确的轨道上......但我们永远不会知道。


我认为问题出在代码的else部分。

我重新格式化了代码,因此我可以确保您对不匹配的大括号没有任何问题(您没有)。

尝试以下代码。仅供参考 - 我删除了$ id2,因为你没有在你提供的代码中使用它。

echo "Looking for: {$fbID}\n";
$photos = '';
for( $i=0; $i<=count( $photoData['data'] ); $i++ )
{
    $id = $photoData['data'][$i]['tags']['data'][0]['id'];
    echo $id . ($id == $fbID )?' matches':' DOES NOT MATCH' . "<br>\n";

    if( $id == $fbID )
    {
        $photos .= "<div style='float:left;margin:25px;'><a href='crop.php?url=".$photoData['data'][$i]['source']."'><img src='".$photoData['data'][$i]['picture']."'/></a></div>";
    }
    else
    {
        $photos = 'We cant find any photo tagged with you, go back and select another album';
        break; // if you don't break, then you're possibly overwriting anything that's been added in the "true" portion of the if statement.
    }
}

[编辑]

这里有两个循环。可能有一种方法可以将其重构为单个循环,但这应该可行。

echo "Looking for: {$fbID}<br>\n";
$items = array();

for( $i=0; $i<=count( $photoData['data'] ); $i++ )
{
    $id = $photoData['data'][$i]['tags']['data'][0]['id'];
    echo $id . ($id == $fbID )?' matches':' DOES NOT MATCH' . "<br>\n";

    if( $id == $fbID )
    {
        $items[] = $photoData['data'][$i];
    }
}

$photos = 'We cant find any photo tagged with you, go back and select another album';
if ( count( $items ) )
{

    foreach( $items )
    {
        $photos .= '<div style="float:left;margin:25px;"><a href="crop.php?url=' . $item['source'] . '"><img src="' . $item['picture'] . '"/></a></div>';
    }
}

echo $photos;