2011-12-12 91 views
-2
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。如果条件不在php中工作

我只是打印$id它匹配$fbID,但它不输入if条件。

我还使用gettype()检查变量($id$fbID)类型。这两个变量都只在相同类型的字符串中。但它不匹配。

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

预先感谢您。

+5

你知道你正在改变代码第二行'$ id'的值,对吧? –

+0

@Emil Vikstrom $ id2,它不是$ id。 –

+0

使用'var_dump($ id);'和'var_dump($ fbID);'来说明这一点,而不是你认为变量包含的内容。 – mario

回答

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

,因为它是清洁的。

UPDATE

使用

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

,并查看结果。如果其中一个(或两者)都说

string(9) 

它显示该变量包含一个字符串,而不是一个整数。要正确地比较字符串,你必须改变

if($id == $fbID){ 

if($id === $fbID){ 

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

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

希望有所帮助。

更新2

而且我不知道,如果它的意图,但

$photos = 'We cant 

也可能是

$photos .= 'We cant 

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

+0

仅用于测试目的我给回声和检查通过消除回声。它仍然无法正常工作 –

+0

这是错误的。你可以回显变量赋值。想想循环如何工作。 while($ row = $ query-> fetch())'这个概念是相同的,这个值在代码中被分配和使用。可以肯定的是,我在评论之前对此进行了测试。 –

+0

您可以将“count($ photoData ['data']) - 1”更改为“(count($ photoData ['data']) - 1)”以确保安全。其余的代码片段看起来完美无瑕。要进行调试,请尝试添加“var_dump($ id);”没有引号。它会告诉你什么PHP认为$ id包含。它总是比简单的回声更好地锁定错误,因为“var_dump”也显示对象(如类)。事实上,我会测试所有变量($ id,$ fbID,$ id2和$ photoData)并检查它们是否都包含它们应该包含的内容。你很快会看到什么变量“不能按预期工作”。可能是“$ fbID”或“$ photoData”... – 2011-12-12 18:09:49

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'; 
    } 
+1

这是错误的。请参阅我对电子寿司答案所做的评论。 –

+0

不工作,我试着修剪 –

+0

如果你在变量上使用'var_dump',你会得到相同的结果吗? – Cyclonecode

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; 
+0

它显示'DOES NOT MATCH' –

+0

但是$ id是什么? –

+0

它来自一个包含Facebook用户ID的数组 –