2011-03-21 119 views
0

有了這個代碼:PHP - 用==比較運算沒有得到預期的結果

if($foo['bar'] == $baz) { 
    $results[] = $foo; 
} 

我永遠達不到分配$results[] = $foo;(某一個值)

現在,如果我這樣做(與此相同,一定值):

strcmp(trim($foo['bar']), trim($baz)); 

我得到的0結果,表示字符串其實都是平等的。那麼...爲什麼在世界上我不能達到$results[] = $foo;

如果兩個strcmp等於0,$ foo ['bar'] == $ baz是不是應該爲真?我錯過了什麼?


順便說一句,它只是一個特定的比較失敗。使用相同的if語句的其他比較將正常工作。

例如:

當$ foo的[ '酒吧'] == '肉' 和$巴茲== '肉',我得到$結果[ '肉']

但是當$ foo的[」酒吧'] =='肉醬'和$巴茲=='肉醬'我得到$結果[]

+0

你可以發佈圍繞此代碼的代碼,並可能發送真正的值,因此它可以被測試?日Thnx。 – DeaconDesperado 2011-03-21 01:24:56

+0

@DeaconDesperado - 明白了。我只是在我的測試中包含了trim(),但沒有在實際遇到麻煩的代碼中嘆息。 – Lothar 2011-03-21 01:38:10

回答

2

觀察到的行爲沒有意義,所以必須有一個隱藏的陷阱。讓我們從trim似乎使它工作的事實開始。

您是否使用var_dump來驗證$foo['bar']$baz確實具有相同的值?

+0

謝謝喬恩。我在我的測試中包含了trim(),但沒有包含有問題的代碼。當我看到var_dump時,我看到一個結果是一個字符更長,「去了什麼?我修剪了那個......呃,哎呀」。所以謝謝你的幫助。 – Lothar 2011-03-21 01:36:54

0

如果你有拖陣列,說A和B,你想assing陣列B到A你這樣做:

$A = $B; 

,如果你想assing只有一個元素:在

$A[] = $B[5]; // ether by index or key 

您如果您嘗試將整個數組分配給陣列中的某個元素,請嘗試以下操作:

$results[] = $foo['bar']; 

如果您要分配w如下所示:

$results['key1'] = $foo[]; 

結果數組中的每個鍵都會保存數組。

+0

其實,我正在試圖像這樣分配整個數組,而不僅僅是一個值。我遍歷一個多維數組並基於每個子數組中是否存在特定值來構建一個新數組。它是過濾一些返回結果的函數的一部分。 – Lothar 2011-03-21 01:33:29

+0

我編輯了我最後的答案。 – SIFE 2011-03-21 10:08:30