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 шт):

Автор решения: Yakoffka

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: если Вам необходимо выбрать и напечатать именно символы, зачем Вы получаете слова? не проще сразу разбить строку посимвольно?

→ Ссылка