Копия массива в циклах foreach

leosun

Новичок
Копия массива в циклах foreach

Мне нужно узнать частоту вхождения слов в строку, я пользую цикл foreach,
однако первый цикл работает с копией массива которая не обновляется от
unset($word_array[$key_1]); как с этим бороться???

$str = 'сыр масло сыр пряник';
$word_array = split(' ', $str);

//print_r($word_array);

foreach ($word_array as $key => $value){
$count_in_text = 0; // Обнулим счетчик слов
echo '<pre>';
//print_r($word_array);
// Начем искать совпадения в тексте
foreach ($word_array as $key_1 => $value_1){
// Если совпадение найдено
if ($value === strtolower($value_1)){
$count_in_text++;
unset($word_array[$key_1]);
}
}
//$word_array = $word_array;
//unset($word_array[$key]);

echo $value.' => '.$count_in_text.'<br>';
 

mak_sim2001

Новичок
Ничего непонял в твоём коде но помоему array_count_values() то что тебе надо. Читай мануал функции для работы с масивами

-~{}~ 13.10.07 13:43:

Перед этим масив можно опустить в нижний регистр
 

Viktor_Rez

Новичок
Я бы делал так:
PHP:
$str = "сыр масло сыр пряник";

$ar_word = explode(" ",$str);
$count_all_word = array_count_values($ar_word);

print_r($count_all_word);
Собсвенно сам код для подсчета из двух строк.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Viktor_Rez
После слов иногда встречаются знаки препинания... ;)

[m]str_word_count[/m]
 

Viktor_Rez

Новичок
str_word_count - я так и не поборол косяк с буквой "я".

Mr_Max, про знаки препинания справедливое замечание, но можно всегда сделать str_replace и убрать из строки знаки препинания.
 

SiMM

Новичок
> можно всегда сделать str_replace и убрать из строки знаки препинания
Проще вместо explode [m]preg_split[/m] заюзать.
 

cDLEON

Онанист РНРСlub
HraKK
Спрячь свой вариант что б ни кто не видел.
$needle ты откуда возьмёшь? Нашёл чем хвастаться мля...
 

HraKK

Мудак
Команда форума
Эм сорри профтыкал. Думал слова. Тогда юзаем мапу
 
Сверху