Как сравнить сравнение двух строк по символам?

Предположим, у нас есть две строки, и я хочу сравнить их посимвольно, чтобы проверить, совпадают ли какие-либо символы строки a и строки b?

Пример:

$a = "Hello";  
$b = "world";  

В приведенном выше "o" присутствует в обеих строках, поэтому алгоритм должен повторить exist.

Пожалуйста, прочтите Как спросить. что ты уже испробовал? Вы проводили какое-либо исследование? Пожалуйста, предоставьте код, с которым у вас возникли проблемы.

BenRoob 07.08.2018 12:18

Возможный дубликат Сравнение строк с использованием == vs. strcmp

Sfili_81 07.08.2018 12:19

Вам нужны совпадающие символы? Или просто наличие совпадающего символа?

Ashickur Rahman 07.08.2018 12:19

@ Sfili_81 это не дубликат, это не простой вопрос типа "= = ".

BenRoob 07.08.2018 12:20

ок не так понятно;)

Sfili_81 07.08.2018 12:21
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
5
1 086
2

Ответы 2

Вы можете преобразовать свои строки с помощью str_split() и получить соответствующие символы с помощью array_intersect():

$a = "Hello";
$b = "world";

$matching_chars = array_intersect(
    str_split($a),
    str_split($b)
);

if (empty($matching_chars)) {
    echo 'exist';
}

$matching_chars будет массивом, содержащим буквы l и o:

Array
(
    [2] => l
    [3] => l
    [4] => o
)

Если вы разделите строки и удалите дубликаты с помощью array_unique, то array_intersect предоставит вам символы, которые находятся в обеих строках.

$a = "Hello";
$b = "world";

$matching = array_unique(array_intersect(str_split(strtolower($a)), str_split(strtolower($b))));
if (count($matching)>0) echo "matching characters: " . implode(", ", $matching); 
//matching characters: l, o

добавил strtolower по предложению Рона.

Я бы также реализовал strtolower, поскольку L и l одинаковы по алфавиту.

Ron van der Heijden 07.08.2018 12:34

если цель состоит только в том, чтобы напечатать что-то, когда есть совпадение, я думаю, вы могли бы удалить шаг array_unique, который увеличивает временную сложность. Но если вы также хотите знать совпадающие символы, тогда этот ответ отличный ...

Elementary 07.08.2018 12:46

@ Элементарно верно. Еще одна вещь, которая дает тот же результат, но быстрее, - это перемещение array_unique для обертывания array_intersect означает, что вы только «уникальны» пересекающимися значениями, которые меньше 2x входных строк. Думаю, я отредактирую это вместо этого

Andreas 07.08.2018 13:01

я думал ... мы также можем написать `if ($ сопоставление) echo" сопоставление символов ".implode (", ", $ сопоставление);`, чтобы ускорить оценку кода ...

Elementary 07.08.2018 13:21

@ Элементарно Я не думал, что это будет иметь такое большое значение. Я действительно думал, что без подсчета будет медленнее из-за приведения типов. Но вы правы, на самом деле это намного быстрее. 3v4l.org/Vfg6J Окей ... что-то это не правильное. Я поменял их местами, и результат был противоположным. 3v4l.org/H0sjA

Andreas 07.08.2018 13:34

протестируйте их по отдельности, покажите разницу @Andreas ... Но онлайн результат всегда будет немного предвзятым. Тем не менее, хорошая работа.

Elementary 07.08.2018 15:39

Другие вопросы по теме