How can I change the value of the duplicated character in a string?
if they are duplicated I want to have a specific value for that else if they are not, I also want to put a specific value for that too.
Scenario 1: Input: hello
Output: ..??.
Scenario 2:
Input: elephant Output: ?.?....
$str = "elephant";
$arr= str_split($str);
for($i = 0; $i < count($arr); $i ) {
for($j = $i 1; $j < count($arr); $j ) {
if($arr[$i] == $arr[$j]){
}
}
}
I really don't know on how will I change the value of it then implode them again.
CodePudding user response:
try this:
$str = "hello";
$arr = str_split($str);
$duplicates = array_unique(array_diff_assoc($arr,array_unique($arr)));
for($i = 0; $i < strlen($str); $i ) {
if(in_array($str[$i], $duplicates)) {
$str[$i] = '?';
} else {
$str[$i] = '.';
}
}
echo $str;
CodePudding user response:
If you don't care about speed that much try this:
<?php
function transform($str) {
$arr= str_split($str);
$counted = array_count_values($arr);
foreach($counted as $letter => $times) {
if($times == 1) {
$str = str_replace($letter, ".", $str);
}else {
$str = str_replace($letter, "?", $str);
}
}
return $str;
}
var_dump(transform("elephant")); // string(8) "?.?....."
var_dump(transform("hello")); // string(5) "..??."
array_count_values will store the amount of time each value is present in the array, so for "elephant" it looks like this:
array(7) {
["e"]=>
int(2)
["l"]=>
int(1)
["p"]=>
int(1)
["h"]=>
int(1)
["a"]=>
int(1)
["n"]=>
int(1)
["t"]=>
int(1)
}
So then it's as easy as iterating over this array, and calling str_replace with '.' if the counted value is 1, and '?' otherwise.
It can be improved to be more performable, but that's not the point of this question.