Почему это логическое значение возвращает значение true

#php #function #boolean #boolean-logic

Вопрос:

Я выполнял задачу по кодированию, которую я прошел, но когда я увидел это решение, я был ошеломлен, потому что я не видел, как это может сработать, потому что выражение возвращает false, но функция self возвращает true, может ли кто-нибудь объяснить мне, почему это так.

Вот вопрос о кодировании

Проверьте, есть ли в строке одинаковое количество » x » и «o». Метод должен возвращать логическое значение и не учитывать регистр. Строка может содержать любой символ.

Примеры ввода/вывода

 XO("ooxx") => true
XO("xooxx") => false
XO("ooxXm") => true
XO("zpzpzpp") => true // when no 'x' and 'o' is present should return true
XO("zzoo") => false 
 

это было мое решение

 function XO($s) {
  
  $ka = false; 
  
  $s = strtolower($s);
  
  if (strpbrk($s,'x') || strpbrk($s,'o')) {
    
    if (substr_count($s,'x') == substr_count($s,'o')){
      $ka = true;
    }
    
  }
  else {
    $ka = true;
  }
  
  return $ka ;
}
 

и это решение, которое кто-то еще опубликовал

 function SO(string $s):bool {
    return substr_count(strtolower($s),'o')==substr_count(strtolower($s),'x');
}
 

И это делает решение as mine, даже если персонаж «zzz», он возвращает значение true. Но как кто-нибудь может мне это объяснить

Комментарии:

1. Потому что 0 все еще равно 0?

2. Не уверен, в чем именно заключается сомнение. Помимо подсказок и strtolower() кэширования, это почти то же самое, что и вы, но оно пропускает избыточные проверки и переменные.

3. даже если символ «zzz», он возвращает значение true , потому что количество o 0 равно == количеству x 0.

4. Мне кажется, что самой сложной частью проблемы является неуказанная схема кодирования.

5. @айнбер да, это было так, спасибо