2011-12-28 48 views
0

這是我在drupal主題中遇到的問題,但問題似乎是一些深奧的PHP問題,所以我想我會試着在這裏找到答案。PHP數組中的這兩個字符串有什麼區別?

$ vars ['theme_hook_suggestions']數組用於查找模板文件。現在它找到了模板,如果我硬編碼相同的價值看似已經存在。

從邏輯上講,它似乎是相同的輸入應該==相同的輸出,所以我覺得如果輸入必須在兩者之間有所不同,如果發現模板而另一個不是。

那麼,我追加到這個數組中的兩個'page__gallery'字符串可能有什麼區別?我試過重新分割並重新組合它來重建字符串。我試過在整個字符串和字符串中的每個字符之間進行編碼比較。在各種方式中,它們看起來都是相同的,但只有在手動輸入時纔有效。與硬編碼字符串值$vars['theme_hook_suggestions']

$str2 = 'page__gallery'; 
$vars['theme_hook_suggestions'][] = $str2; // if I comment this line out, it doesn't find the template. 
print $str2; //output is page__gallery 

$str1 = $vars['theme_hook_suggestions'][3]; 
$vars['theme_hook_suggestions'][] = $str1; // if I comment this line out, it finds the template still. 
print $str1; //output is page__gallery 

print $str1 == $str2; // 1 
print $str1 === $str2; // 1 
var_dump($str1) // Outputs: string(13) "page__gallery" 
var_dump($str2) // Outputs: string(13) "page__gallery" 

的var_dump:的$vars['theme_hook_suggestions']有相同的字符串

array(6) { [0]=> string(10) "page__node" [1]=> string(13) "page__node__%" [2]=> string(14) "page__node__96" [3]=> string(13) "page__gallery" [4]=> string(20) "page__drisco_gallery" [5]=> string(13) "page__gallery" } 

的var_dump爲已經存在重新附加:

array(6) { [0]=> string(10) "page__node" [1]=> string(13) "page__node__%" [2]=> string(14) "page__node__96" [3]=> string(13) "page__gallery" [4]=> string(20) "page__drisco_gallery" [5]=> string(13) "page__gallery" } 

第一個作品,第二個不是。

幫助!

+1

嘗試'var_dump'而不是'print_r'並更新。 – 2011-12-28 20:22:10

+1

嘗試使用'var_dump()'而不是'print_r()'作爲'var_dump()'會告訴你所存儲的類型。 – Crontab 2011-12-28 20:23:12

回答

0

打印返回1總是 http://php.net/manual/en/function.print.php

所以這行不正確測試

print $str1 === $str2; // 1 

至於建議的var_dump()是更好的選擇。

+0

它總是返回1,但它應該仍然打印0如果該語句爲false,對不對?我編輯了var_dumps。 – Joren 2011-12-28 21:35:47

+0

echo print 1 == 0; //打印1,打印1 == 0; // 沒有 – 2012-01-03 09:09:00