[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сравнение двух строк + вывод совпадающих символов
zerofx
Сразу извините за такой вопрос, но всежтакы - мне нужно сравнить две строки, и выбрать символы которые совпадают, и их количество ... Объясните пожалуйста как это организовать ... Извините я тока начинаю изучать php, многое уже выучил, но без мудрых советчиков не обойдешься )))



Спустя 3 минуты, 19 секунд (25.09.2012 - 11:15) Игорь_Vasinsky написал(а):

Спустя 1 минута, 5 секунд (25.09.2012 - 11:16) pak написал(а):
можно пример привести, т е что дано и что должно быть на выходе?))

Спустя 11 минут (25.09.2012 - 11:27) Игорь_Vasinsky написал(а):
Цитата
выбрать символы которые совпадают, и их количество

Спустя 8 минут, 14 секунд (25.09.2012 - 11:35) Игорь_Vasinsky написал(а):
Я как бы намекнул - тебе подумать тока над основной задачей - как из получившегося собрать единый массив - и подсчитать кол-во символов
<?php
header('Content-Type: text/html;charset=UTF-8');

$a = 'Какой чудесный день!';
$b = 'Такой херовый час...';

$a_array = preg_split("##isuU", $a);
$b_array = preg_split("##isuU", $b);

#echo '<pre>' . print_r($a_array, 1) . '</pre>';
#echo '<pre>' . print_r($b_array, 1) . '</pre>';


$a_array_diff = array_diff($a_array, $b_array);
$b_array_diff = array_diff($b_array, $a_array);

#Сравнение массива $a_array к массиву $b_array вида: буква=>кол-во
echo '<pre>' . print_r(array_count_values($a_array_diff), 1) . '</pre>';
#Сравнение массива $b_array к массиву $a_array вида: буква=>кол-во
echo '<pre>' . print_r(array_count_values($b_array_diff), 1) . '</pre>';
?>


Выход:

Array
(
[К] => 1
[у] => 1
[д] => 2
[н] => 2
[ь] => 1
[!] => 1
)
Array
(
[Т] => 1
[х] => 1
[р] => 1
[в] => 1
[.] => 3
)

Спустя 8 минут, 3 секунды (25.09.2012 - 11:43) zerofx написал(а):
$ str1 = adcb;
$ str2 = aaddccbb;

echo "Количество совпадающих символов в строках:";

на выходе я должен получить количество символов которые совпадают, и их самих

вот я сам думаю что для этого использовать ... массивы - т.е. выполнить функцию преобразования строк в массивы, но что потом делать с ними?? ... и снова тупик ..

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

Спустя 1 минута, 22 секунды (25.09.2012 - 11:44) zerofx написал(а):
и вообще что вы порекомендуете когда есть потребность сравнить что-то ну например это строки ... что лучше использовать массивы или циклы?

Спустя 4 минуты, 18 секунд (25.09.2012 - 11:49) Игорь_Vasinsky написал(а):
а.. ну я те разность массивов показал.

идея вроде мной прозрачно обрисована, ты игноришь чтоли? laugh.gif laugh.gif laugh.gif

Спустя 2 минуты, 53 секунды (25.09.2012 - 11:52) zerofx написал(а):
не smile.gif спс... а что означаюєт $a_array = preg_split("##isuU", $a) - можешь объяснить, а именно - "##isuU" ...

Спустя 3 минуты, 23 секунды (25.09.2012 - 11:55) Игорь_Vasinsky написал(а):
)))) ну это паттерн, пустой паттерн - который показал функции как разделить строки - а именно - разобрать по символу.

Спустя 12 минут, 51 секунда (25.09.2012 - 12:08) zerofx написал(а):
а где можно о них почитать?????

а вот код который делает почти то же ...
<?
$data = "Две в и одна с";
$result = count_chars($data, 0);
for ($i=0; $i < count($result); $i++)
{
if ($result[$i] != 0)
echo "\"" , chr($i) , "\" встречается в строке $result[$i] раз(а)".'<br>';
}
?>


только он сравнивает данные из одной строки...

Спустя 1 минута, 36 секунд (25.09.2012 - 12:09) zerofx написал(а):
почему я его вам показал ? - мне нужен примерно, такой же - вывод данных

Спустя 1 минута, 30 секунд (25.09.2012 - 12:11) Игорь_Vasinsky написал(а):
всегда есть несколько решений. остаётся тока выбрать оптимальное wink.gif

Спустя 11 минут, 37 секунд (25.09.2012 - 12:22) zerofx написал(а):
ок ... но если мне нужно вывести данные не в формате массива? т.е. скажем нужно вывести их в строку, то есть нужно будет использовать foreach, а затем с помощью оператора if вывести все значения??

Спустя 1 минута, 8 секунд (25.09.2012 - 12:24) zerofx написал(а):
а почему твой код выводит только те символы которые являются уникальными?

Спустя 39 секунд (25.09.2012 - 12:24) zerofx написал(а):
мне как раз надо наоборот - показать те символы которые совпадают??

Спустя 3 минуты, 11 секунд (25.09.2012 - 12:27) Игорь_Vasinsky написал(а):
оф. сайт PHP - http://php.net/manual/ru/ref.array.php - очень полезный источник информации.

Спустя 9 минут, 51 секунда (25.09.2012 - 12:37) zerofx написал(а):
ты не обижайся .. пойми ну некого спросить)) поэтому и столько вопросов + постоянно попадаешь в ступор когда не можешь выбрать, или понять что надо делать .. smile.gif

Спустя 2 минуты, 24 секунды (25.09.2012 - 12:40) Игорь_Vasinsky написал(а):
)) да нет... это привычное дело)
для этого и тут, а ссылки лаю - чтоб ты краем глазами другие возможные функции выдел и развивал в себе знания.

Спустя 2 минуты, 28 секунд (25.09.2012 - 12:42) zerofx написал(а):
просто сразу хочется стать крутым php кодером biggrin.gif

Спустя 52 секунды (25.09.2012 - 12:43) Игорь_Vasinsky написал(а):
сразу не выдет наверн)

Спустя 13 минут, 50 секунд (25.09.2012 - 12:57) zerofx написал(а):
то все шутки ... но я медленно но верно иду к той цели)

можно еще поконсультоваты на счет вот чего -

когда закомментировать функцию
$ a_array_diff
+
$ b_array_diff
- и изменить их с -
$ a_array_diff
+
$ b_array_diff
на

echo "<pre>". print_r (array_count_values ​​($ a_array), 1). '</ pre>';
echo "<pre>". print_r (array_count_values ​​($ b_array), 1). '</ pre>';

то оно странно строит массив ... заносит все символы, но почему-то 0-й индекс начинается с 2-ки - что в первом случае, что во втором .... что это значит?
для чего он, и откуда берется?

Спустя 2 минуты, 25 секунд (25.09.2012 - 12:59) Игорь_Vasinsky написал(а):
а что странного?
ты подсчитываешь количест-во вхождений символов в тот или иной массив.

Спустя 3 минуты, 26 секунд (25.09.2012 - 13:03) zerofx написал(а):
хорошо я понял, а можно как-то обойтись без нее ... ну чтобы она не подсчитывала число входа символов а массив?

Спустя 3 минуты, 12 секунд (25.09.2012 - 13:06) Игорь_Vasinsky написал(а):
можно изобретать велосипед - но зачем?

задача проста как 2х2

1. Получить массивы из строк
2. сравнить эти массивы
3. удалить всё из этих массив - что не совпадает
4. остатки - склеить
5. взвесить

Спустя 2 минуты, 19 секунд (25.09.2012 - 13:08) zerofx написал(а):
Гениально! вот чего мне не хватало laugh.gif плана боевых действий biggrin.gif biggrin.gif biggrin.gif

Спустя 5 минут, 29 секунд (25.09.2012 - 13:14) Игорь_Vasinsky написал(а):
с этого и нужно начинать всегда))

Спустя 39 минут, 14 секунд (25.09.2012 - 13:53) zerofx написал(а):
Для этого надо иметь хоть какой-то опыт)) даже для того что бы составить план работы программы))) + фунций там несколько десятков .. да что там)))
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.