Здравствуйте, уже 3 дня бьюсь и не могу добиться результата Есть файл bd.bin такого содержания: привет|ответ1|0 привет форум|ответ2|0 как дела|ответ3|0 При вводе пользователем слова "привет" мне нужно взять все строки в которых до первого сепаратора есть слово "привет" и вывести рандомный ответ в данном случае из двух строк(ответ после первого сепаратора)т.е. при вводе слова "привет" получить "ответ1" или "ответ2" вот мой код, но он не работает: PHP: $file='bd.bin'; $content = file ($file); foreach ($content as $line) { $result = explode ('|', $line); if ($result[0] == $message) { $randomArray = array_rand($result); $answer=$result[$randomArray][array_rand($result[$randomArray])]; //echo $answer; var_dump($answer); //mb_convert_variables('utf-8', 'original encode', $answer); } } всем заранее спасибо!
решение: Код (Text): $message = 'привет'; $file='bd.bin'; $content = file ($file); $answers = []; foreach ($content as $line) { $result = explode ('|', $line); if ($result[0] == $message) { $answers[] = $result[1]; } } $answer = !empty($answers) ? $answers[array_rand($answers)] : null;
имеется ввиду содержится, а не строго равно как у вас PHP: if ($result[0] == $message) кроме того - полно чуши вроде array_rand ... без понимания что это такое примерно так: PHP: $randomArray = []; foreach ($content as $line) { $result = explode ('|', $line); if (mb_substr($message,$result[0])!==false) { $randomArray[] = $result[1]; } } $answer = ($randomArray) ? $randomArray[[rand(0,COUNT($randomArray)-1] : ''; echo $answer;
тут как бы будет дальше продолжение если нет строгого вхождения, то слово из строки, если и этого нет, то символ из строки
Писал на коленке, код не прогонял - но смысл должен быть ясен.. Возможно где то недопонял задачу или недокрутил код --- Добавлено --- И нет работает, понятие мутное. Ошибка? Или пустой результат, а что и на входе в $message? Итд
Код (Text): $answer = ($answers) ? $answers[[rand(0,COUNT($answers)-1)]] : ''; вот в этой строке что то наверное...на выходе var_dump($answer); = NULL