2013-07-31 4 views
-2

У меня есть хэш-карта, которая содержит определенные ключи, которые являются отсортированными версиями их значений. Например,Сравнение строк PHP, === или strcmp не работает

$hash = array("abc" => "cab", 
       "aas" => "sas" 
     ); 

У меня есть массив отсортированных строк ($ sorted_words), и я хочу, чтобы сравнить все эти строки с ключами выше хэш-карты, и если совпадение найдено, сохранить соответствующее значение в строка. Я использую ===, а также strcmp(), но не работает. Он всегда говорит, что строки не совпадают. Вот мой код:

foreach($sorted_words as $sc) { 
    foreach($hash as $key => $value) { 
     if(strcmp($sc, $key) == 0) { // or if($sc === $key) 
      $string_match .= $value; // store the corresponding value for the matched key. 
     } 
    } 
} 

Но сравнение терпит неудачу как STRCMP() всегда возвращает больше 1 и «===» никогда не возвращает так. Кто-нибудь может сказать, что случилось? Я уверен, что будут строки, которые будут соответствовать.

+0

Попробуйте echo $ sc. '==' $ key; Что это печатает? Соответствуют ли строки? – cartina

+2

как 'sas' sorted' aas' должно быть 'ass' – DevZer0

+0

Сравнение строк PHP, === или strcmp **, по-видимому, работает **. Хотя какой бы ни был ваш код –

ответ

1

Попробуйте это:

$string_match = ""; 
foreach($sorted_words as $sc) { 
    if(array_key_exists($sc, $hash)){ 
     $string_match .= $hash[$sc]; 
    } 

} 
0

Когда программист застрял, они должны начать отладку

foreach($sorted_words as $sc) { 
    foreach($hash as $key => $value) { 
     if($sc === $key) { 
      $string_match .= $value; key. 
     } 
     var_dump($sc, $key, $sc === $key); 
    } 
} 

, а затем изучить вывод.
Это единственный способ убедиться,, если есть строки, которые соответствуют.
В то время как ваш текущий «довольно уверен» - это просто предположение.