Удалить все слова длиннее 5 символов

Beginner

Написал код:

<!--?php
function delete_words($text){
$str = explode(' ', $text);
foreach($str as $value){
    if (mb_strlen($value)-->5){

       unset($str[$value]); 
    }
}
print_r($str);
}
$text = "один двадцать три сорок восемь пятдесят";
delete_words($text);
?>

Но он выводит все слова всё равно, не удаляя те, что длиннее 5 букв. Что тут не так?

3 ответа

Beginner

Цикл нужно записать вот так

foreach($str as $index => $value){  
    if (mb_strlen($value) > 5){  
       unset($str[$index]);   
    }  
}

(обратите внимание на переменную $index)


Beginner

альтернативный метод - воспользоваться array_filter

$text = 'один два пять семнадцать три сорок семь два девятьнадцать';

$result = array_filter(explode(' ', $text), function ($word) { return mb_strlen($word) < 5; });

var_dump($result);

эта функция создана именно для подхода, используемого в задаче (только не самой задачи, потому что небольшие изменения в условиях могут обрубить этот путь): взять абстрактный массив, прогнать его через функцию, и на основе результата этой функции ("да" - true или "нет" - false) оставить или удалить элемент.


Beginner

Как вариант:

Под конкретные задачи, регулярное выражение корректируется. Выше - простейший вариант для примера

licensed under cc by-sa 3.0 with attribution.