2011-12-12 41 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的數組 –