Предположим, у нас есть две строки, и я хочу сравнить их посимвольно, чтобы проверить, совпадают ли какие-либо символы строки a и строки b?
Пример:
$a = "Hello";
$b = "world";
В приведенном выше "o" присутствует в обеих строках, поэтому алгоритм должен повторить exist.
Возможный дубликат Сравнение строк с использованием == vs. strcmp
Вам нужны совпадающие символы? Или просто наличие совпадающего символа?
@ Sfili_81 это не дубликат, это не простой вопрос типа "= = ".
ок не так понятно;)






Вы можете преобразовать свои строки с помощью 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 одинаковы по алфавиту.
если цель состоит только в том, чтобы напечатать что-то, когда есть совпадение, я думаю, вы могли бы удалить шаг array_unique, который увеличивает временную сложность. Но если вы также хотите знать совпадающие символы, тогда этот ответ отличный ...
@ Элементарно верно. Еще одна вещь, которая дает тот же результат, но быстрее, - это перемещение array_unique для обертывания array_intersect означает, что вы только «уникальны» пересекающимися значениями, которые меньше 2x входных строк. Думаю, я отредактирую это вместо этого
я думал ... мы также можем написать `if ($ сопоставление) echo" сопоставление символов ".implode (", ", $ сопоставление);`, чтобы ускорить оценку кода ...
@ Элементарно Я не думал, что это будет иметь такое большое значение. Я действительно думал, что без подсчета будет медленнее из-за приведения типов. Но вы правы, на самом деле это намного быстрее. 3v4l.org/Vfg6J Окей ... что-то это не правильное. Я поменял их местами, и результат был противоположным. 3v4l.org/H0sjA
протестируйте их по отдельности, покажите разницу @Andreas ... Но онлайн результат всегда будет немного предвзятым. Тем не менее, хорошая работа.
Пожалуйста, прочтите Как спросить. что ты уже испробовал? Вы проводили какое-либо исследование? Пожалуйста, предоставьте код, с которым у вас возникли проблемы.