2011-12-28 3 views
0

Это проблема, с которой я сталкиваюсь в теме drupal, но проблема, кажется, какая-то эзотерическая проблема с PHP, поэтому я подумал, что попытаюсь найти ответ здесь.В чем разница между этими двумя строками в массиве PHP?

массив $ vars ['theme_hook_suggestions'] используется для поиска файлов шаблонов. Прямо сейчас он находит шаблон, если я жестко кодирую то же значение, что кажется уже существующим.

Похоже, что такой же ввод должен быть одинаковым, поэтому я чувствую, что входные данные должны быть как-то разными между ними, если найти шаблон, а другой нет.

Так что же может быть разница между двумя строками «page__gallery», которые я добавляю к этому массиву? Я попытался восстановить строку, разделив ее и рекомбинируя. Я попытался сделать сравнение кодирования между целыми строками и каждым символом в строке. Во всех отношениях они кажутся одинаковыми, но он работает только, если я вручную набираю его.

$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 из $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" } 

Первый один работает, второй - нет.

Помощь!

+1

Попробуйте 'var_dump' вместо' print_r' и обновить. –

+1

Попробуйте использовать 'var_dump()' вместо 'print_r()' как 'var_dump()' будет сообщать вам тип того, что также хранится. – Crontab

ответ

0

печать возвращает 1 всегда http://php.net/manual/en/function.print.php

Так эта линия не проверяет правильность

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

Как предложил var_dump() является лучшим выбором.

+0

Он всегда возвращает 1, но он должен все еще печатать 0, если это утверждение ложно, правильно? Я редактировал с помощью var_dumps. – Joren

+0

echo print 1 == 0; // печатает 1, печатать 1 == 0; // ничего –

Смежные вопросы