Wytłumacz proszę w jaki sposób chciałbyś tutaj wykorzystać wyrażenia regularne? :|
explode
, liczenie liczby liter w każdym wyrazie i porównywanie.
Nie chciało mi się tłumaczyć, ale proszę bardzo. Co prawda troszkę nagmatwałem preg_callbackiem bo mogłem bezprośrednio na match_all zrobić, i appendować do nowej tablicy wyniki, bez potrzeby kodowania do jsona, ale nie chciało mi się poprawiać, odpowiedź masz. A explode na spacje to '|([^\s]+)|',
<?php
echo '<pre>';
$string = 'test example sampless testy';
$line = preg_replace_callback(
'|([^\s]+)|',
function ($matches) {
$longest = 0;
$slowo = '';
$litera = '';
foreach (range('A', 'Z') as $char) {
preg_match_all('/('.$char.')/isu',$matches[1],$wynik);
$actualLong = count($wynik[0]);
if($actualLong > $longest){
$longest = $actualLong;
$slowo = $matches[1];
$litera = $char;
}
}
return '{"slowo": "'.$slowo.'", "dlugosc": '.$longest.',"litera":"'.$litera.'"},';
},
$string
);
$wyniki =json_decode('['.rtrim($line, ",").']',true);
$najwiecejPowtorzen = 0;
$wynik = '';
for($i = 0; $i < count($wyniki);$i++){
if($wyniki[$i]['dlugosc'] > $najwiecejPowtorzen){
$najwiecejPowtorzen = $wyniki[$i]['dlugosc'];
$wynik = $wyniki[$i];
}
}
var_dump($wynik);
?>
array(3) {
["slowo"]=>
string(8) "sampless"
["dlugosc"]=>
int(3)
["litera"]=>
string(1) "S"
}
Po lekkim refactorze dla tych co mają problemy...
<?php
echo '<pre>';
var_dump(findRepeartingCharsInWord('test example sampless testy'));
function findRepeartingCharsInWord($aString)
{
$words = explode(' ',$aString);
$words = array_unique($words);
$repeartCount = 0;
$foundWord = '';
$char = '';
foreach($words as $word)
{
foreach (range('A', 'Z') as $matchingChar)
{
preg_match_all('/('.$matchingChar.')/isu',$word,$foundedRepeartedCharsInWord);
$numberOfRepeartedCharInWord = count($foundedRepeartedCharsInWord[0]);
if($numberOfRepeartedCharInWord > $repeartCount)
{
$repeartCount = $numberOfRepeartedCharInWord;
$foundWord = $word;
$matchedChar = $matchingChar;
}
}
}
return array
(
'foundWord' => $foundWord,
'RepeartCount' => $repeartCount,
'matchedChar' => $matchedChar
);
}
?>