За последние 24 часа нас посетили 20329 программистов и 1012 роботов. Сейчас ищут 373 программиста ...

вывод ответов для бота

Тема в разделе "Прочее", создана пользователем RedGog, 2 ноя 2022.

  1. RedGog

    RedGog Новичок

    С нами с:
    2 ноя 2022
    Сообщения:
    5
    Симпатии:
    0
    Здравствуйте, уже 3 дня бьюсь и не могу добиться результата:(
    Есть файл bd.bin такого содержания:
    привет|ответ1|0
    привет форум|ответ2|0
    как дела|ответ3|0
    При вводе пользователем слова "привет" мне нужно взять все строки в которых до первого сепаратора есть слово "привет" и вывести рандомный ответ в данном случае из двух строк(ответ после первого сепаратора)т.е. при вводе слова "привет" получить "ответ1" или "ответ2"
    вот мой код, но он не работает:

    PHP:
    1. $file='bd.bin';
    2. $content = file ($file);
    3. foreach ($content as $line)
    4. {
    5.     $result = explode ('|', $line);
    6.     if ($result[0] == $message)
    7.     {
    8.         $randomArray = array_rand($result);  
    9.         $answer=$result[$randomArray][array_rand($result[$randomArray])];
    10.         //echo $answer; var_dump($answer);
    11.         //mb_convert_variables('utf-8', 'original encode', $answer);
    12.     }
    13. }
    всем заранее спасибо!
     
    #1 RedGog, 2 ноя 2022
    Последнее редактирование модератором: 2 ноя 2022
  2. RedGog

    RedGog Новичок

    С нами с:
    2 ноя 2022
    Сообщения:
    5
    Симпатии:
    0
    решение:
    Код (Text):
    1. $message = 'привет';
    2. $file='bd.bin';
    3. $content = file ($file);
    4. $answers = [];
    5. foreach ($content as $line) {
    6.     $result = explode ('|', $line);
    7.     if ($result[0] == $message) {
    8.         $answers[] = $result[1];
    9.     }
    10. }
    11. $answer = !empty($answers) ? $answers[array_rand($answers)] : null;
     
  3. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    имеется ввиду содержится, а не строго равно как у вас
    PHP:
    1. if ($result[0] == $message)
    кроме того - полно чуши вроде array_rand ... без понимания что это такое

    примерно так:
    PHP:
    1. $randomArray = [];
    2. foreach ($content as $line) {
    3.     $result = explode ('|', $line);
    4.     if (mb_substr($message,$result[0])!==false)  {
    5.         $randomArray[] = $result[1];  
    6.     }
    7. }
    8. $answer = ($randomArray) ? $randomArray[[rand(0,COUNT($randomArray)-1] : '';
    9. echo $answer;
     
    RedGog нравится это.
  4. RedGog

    RedGog Новичок

    С нами с:
    2 ноя 2022
    Сообщения:
    5
    Симпатии:
    0
    Спасибо огромное за правку недочетов! теперь просто идеально! но только не пашет)
     
    #4 RedGog, 2 ноя 2022
    Последнее редактирование: 2 ноя 2022
  5. RedGog

    RedGog Новичок

    С нами с:
    2 ноя 2022
    Сообщения:
    5
    Симпатии:
    0
    тут как бы будет дальше продолжение если нет строгого вхождения, то слово из строки, если и этого нет, то символ из строки
     
  6. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    Писал на коленке, код не прогонял - но смысл должен быть ясен.. Возможно где то недопонял задачу или недокрутил код
    --- Добавлено ---
    И нет работает, понятие мутное. Ошибка? Или пустой результат, а что и на входе в $message? Итд
     
  7. RedGog

    RedGog Новичок

    С нами с:
    2 ноя 2022
    Сообщения:
    5
    Симпатии:
    0
    Код (Text):
    1. $answer = ($answers) ? $answers[[rand(0,COUNT($answers)-1)]] : '';
    вот в этой строке что то наверное...на выходе var_dump($answer); = NULL