Основываясь на примере, который вы указали, это похоже на то, что вы называете «поворот», на самом деле может быть «anagram».
Множество ответов уже здесь показывают, что существует много разных способов сделать это. Просто для удовольствия, вот еще один метод, используя string accessing by character (следовательно, это не многобайтовый сейф).
function anagramDiff($a, $b) {
$diff = [];
foreach ([$a, $b] as $x) {
$c = isset($c) ? -1 : 1;
for ($i = 0; $i < strlen($x); $i++) {
isset($diff[$x[$i]]) ? $diff[$x[$i]] += $c : $diff[$x[$i]] = $c;
}
}
return array_filter($diff);
}
Это итерация по каждой строке и создает массив различий между количеством символов, содержащихся в каждой строке. Он увеличивает для первой строки и декременты для второй строки, поэтому она заканчивается положительными числами для символов, найденных в первой строке, без количества во втором и отрицательных чисел для наоборот.
Если вы просто хотите использовать его, чтобы увидеть, является ли одна строка анаграммой другой, anagramDiff('hello', 'helol')
вернет пустой массив (который будет оцениваться как false), потому что нет различий.
Но вы также можете использовать его, чтобы узнать, каковы различия на самом деле, например.
anagramDiff('hello', 'jello'); // returns ['h' => 1, 'j' => -1]
anagramDiff('hello', 'lololol') // returns ['h' => 1, 'e' => 1, 'o' => -2, 'l' => -2]
Просто проверьте, если все символы одной строки в другую. Или сортируйте символы и проверьте, совпадают ли они. –
Я бы сортировал обе строки (в алфавитном порядке), а затем сравнивал. http://stackoverflow.com/questions/9912469/php-how-to-sort-the-characters-in-a-string –
Используйте strrev, он будет делать именно то, что вы хотите –