php: Из заданного текста выбрать и напечатать те символы, которые встречаются в нем ровно один раз (в том порядке, как они встречаются в тексте)
Впервые имею дело с php
Узнала, что для разбиения строк с помощью разделителя необходимо использовать функцию explode:
<?php
// Пример 1
$pizza = "кусок1 кусок2 кусок3 кусок4 кусок5 кусок6";
$pieces = explode(" ", $pizza);
echo $pieces[0]; // кусок1
echo $pieces[1]; // кусок2
?>
А чтобы убрать повторяющиеся значения из массива, используем array_unique:
<?php
$input = array("a" => "green", "red", "b" => "green", "blue", "red");
$result = array_unique($input);
print_r($result);
?>
Результат выполнения данного примера:
Array
(
[a] => green
[0] => red
[1] => blue
)
Для начала решила сделать ввод текста пользователем и разбить строку,но сейчас ввод текста есть, разбиения почему-то нет
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>help</title>
</head>
<body>
<form class="decor" method="post">
<div class="form-left-decoration"></div>
<div class="form-right-decoration"></div>
<div class="circle"></div>
<div class="form-inner">
<h3>Введите текст</h3>
<textarea placeholder="Текст" name="text"></textarea>
<input type="submit" value="Отправить">
<?php
$input = $_POST['text'];
$elem = explode(" ", $text);
echo $elem[0]; // это проверка чтобы ввывести первые 2 элемента text
echo $elem1[1]; // но они не выводятся
?>
</div>
</form>
</body>
</html>
Прошу вашей помощи в решении задачи(если можно, с комментариями)
Это я ответ программы на ввод 1 2 3 3 при использовании кода ниже
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>help</title>
</head>
<body>
<form class="decor" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<div class="form-left-decoration"></div>
<div class="form-right-decoration"></div>
<div class="circle"></div>
<div class="form-inner">
<h3>Введите текст</h3>
<textarea placeholder="Текст" name="text"></textarea>
<input type="submit" value="Отправить">
<?php
if (!empty($_POST['text'])) {
$input = $_POST['text'];
$elem = explode(" ", $input);
// собственно, решение:
// преобразуем строку в массив
$arrayAllInputSymbols = str_split($input);
// избавимся от повторяющихся значений, поменяв местами ключи и значения полученного массива
$invertInputSymbols = array_flip($arrayAllInputSymbols);
// еще раз поменяем местами ключи и значения
$uniqueInputSymbols = array_flip($invertInputSymbols);
var_dump(array_flip(array_flip($uniqueInputSymbols)));
}
?>
</div>
</form>
</body>
</html>
Ответы (1 шт):
1 Для тега form укажите атрибут action;
2 Не путайте переменные $input и $text, $elem1 и $elem
3 Я невнимательно прочел задание и поспешил с ответом. Вот верный вариант.
if (!empty($_POST['text'])) {
$input = $_POST['text'];
// получаем массив с количеством повторений символов
$arrayAllInputSymbols = str_split($input);
$numberSymbols = [];
foreach ($arrayAllInputSymbols as $symbol) {
if (empty( $numberSymbols[$symbol] )) {
$numberSymbols[$symbol] = 0;
}
++$numberSymbols[$symbol];
}
var_dump($numberSymbols);
// отсеиваем результаты, количество повторений которых не равно 1
$filteredSymbols = array_filter($numberSymbols, function ($symbol) {
var_dump($symbol, $symbol === 1, '<br>');
return $symbol === 1;
});
var_dump($filteredSymbols);
// получаем искомый массив
$result = array_keys($filteredSymbols);
var_dump($result);
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>help</title>
</head>
<body>
<form class="decor" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<div class="form-left-decoration"></div>
<div class="form-right-decoration"></div>
<div class="circle"></div>
<div class="form-inner">
<h3>Введите текст</h3>
<textarea placeholder="Текст" name="text"></textarea>
<input type="submit" value="Отправить">
</div>
</form>
</body>
</html>
PS: если Вам необходимо выбрать и напечатать именно символы, зачем Вы получаете слова? не проще сразу разбить строку посимвольно?
