Я делаю программу, в которой мой ввод - «палаш». Результат будет:
p-1
a-2
l-1
s-1
h-1
Мой код приведен ниже:
<?php
$myString = "palash";
$j=strlen($myString);
$narray = array();
for($i=0;$i<$j;$i++){
$val = 0;
for($k=0;$k<$j;$k++){
if ($myString[$i]==$myString[$k]){
$val++;
}
}
$key = $myString[$i];
$narray[$key] = $val;
}
foreach($narray as $key => $val){
echo $key. "-". $val;
echo"<br>";
}
?>
Но я хочу свести к минимуму свой код и добавить опцию поиска перед вторым циклом для поиска, дублируется ли элемент или нет. Так что я могу избавиться от второго цикла foreach.
Я бы создал массив типа int размером 26, а затем обработал бы мою строку в цикле, используя код ascii, чтобы получить правильный индекс в моем массиве и увеличить его. Одна петля. Затем вы извлекаете ascii-код символа для отображения с помощью вашего индекса и отображаете значение внутри него :) Вероятно, не лучший, но я подумал, что было бы неплохо поделиться






Вы можете использовать array_count_values для подсчета значений. Вы можете проверить, есть ли дубликаты, если есть 2 или более значений.
$myString = "palash";
$arr = str_split( $myString ); //Split the string into array.
$arr = array_count_values( $arr ); //Count the array values.
echo "<pre>";
print_r( $arr );
echo "</pre>";
Это приведет к:
Array
(
[p] => 1
[a] => 2
[l] => 1
[s] => 1
[h] => 1
)
Вы можете проверить, существует ли ключ массива, а затем увеличить счетчик
<?php
$myString = "palash";
$j=strlen($myString);
$narray = array();
for($i=0;$i<$j;$i++){
$key = $myString[$i];
if (array_key_exists($key,$narray))
{
$narray[$key] = $narray[$key]+1;
}
else
{
$narray[$key] = 1;
}
}
foreach($narray as $key => $val){
echo $key. "-". $val;
echo"<br>";
}
?>
Проверьте это: ссылка на сайт