Задать вопрос
@Ainur100

Как привести массив в более читабельный вид?

Из статьи на хабре, я позаимствовал функцию.
Для тех кто не хочет открывать ссылку,то вот эта функция:
function chastrechiRUS($string){

 /*
 Группы окончаний:
 1. прилагательные
 2. причастие
 3. глагол
 4. существительное
 5. наречие
 6. числительное
 7. союз
 8. предлог
*/

 $groups = array(
 1 => array ('ее','ие','ые','ое','ими','ыми','ей','ий','ый','ой','ем','им','ым','ом',
'его','ого','ему','ому','их','ых','ую','юю','ая','яя','ою','ею'),
 2 => array ('ивш','ывш','ующ','ем','нн','вш','ющ','ущи','ющи','ящий','щих','щие','ляя'),
 3 => array ('ила','ыла','ена','ейте','уйте','ите','или','ыли','ей','уй','ил','ыл','им','ым','ен',
'ило','ыло','ено','ят','ует','уют','ит','ыт','ены','ить','ыть','ишь','ую','ю','ла','на','ете','йте',
'ли','й','л','ем','н','ло','ет','ют','ны','ть','ешь','нно'),
 4 => array ('а','ев','ов','ье','иями','ями','ами','еи','ии','и','ией','ей','ой','ий','й','иям','ям','ием','ем',
'ам','ом','о','у','ах','иях','ях','ы','ь','ию','ью','ю','ия','ья','я','ок', 'мва', 'яна', 'ровать','ег','ги','га','сть','сти'),
 5 => array ('чно', 'еко', 'соко', 'боко', 'роко', 'имо', 'мно', 'жно', 'жко','ело','тно','льно','здо','зко','шо','хо','но'),
 6 => array ('чуть','много','мало','еро','вое','рое','еро','сти','одной','двух','рех','еми','яти','ьми','ати',
'дного','сто','ста','тысяча','тысячи','две','три','одна','умя','тью','мя','тью','мью','тью','одним'),
 7 => array ('более','менее','очень','крайне','скоре','некотор','кажд','други','котор','когд','однак',
'если','чтоб','хот','смотря','как','также','так','зато','что','или','потом','эт','тог','тоже','словно',
'ежели','кабы','коли','ничем','чем'),
 8 => array ('в','на','по','из')
);

$res=array();
$string=mb_strtolower($string);
$words=explode(' ',$string);
//print_r($words);
foreach ($words as $wk=>$w){
    $len_w=mb_strlen($w);
 foreach ($groups as $gk=>$g){
  foreach ($g as $part){
    $len_part=mb_strlen($part);
   if (
        mb_substr($w,-$len_part)==$part && $res[$wk][$gk]<$len_part //любая часть речи, окончания
        || mb_strpos($w,$part)>=(round(2*$len_w)/5) && $gk==2 //причастие, от 40% и правее от длины слова
        || mb_substr($w,0,$len_part)==$part && $res[$wk][$gk]<$len_part && $gk==7 //союз, сначала слОва
        || $w==$part //полное совпадение
      ) {
         //echo $w.':'.$part."(".$gk.")<br>";
         if ($w!=$part) $res[$wk][$gk]=mb_strlen($part); else $res[$wk][$gk]=99;
        }

  }
 }
if (!isset($res[$wk][$gk])) $res[$wk][$gk]=0;
//echo "<hr>";
}


$result=array();
foreach($res as $r) {
 arsort($r);
 array_push($result,key($r));
}
return $result;
}
print_r(chastrechiRUS('В небе летит красивый сверкающий самолёт'));

Вопрос в следующем. массив выводится в виде Array ( [0] => 8 [1] => 4 [2] => 3 [3] => 1 [4] => 2 [5] => 4 ), как сделать,чтобы вместо цифр стояли слова из переменной $string, например Array ( [в] => 8 [небо] => 4 [летит] => 3 [красивый] => 1 [сверкающий ] => 2 [самолёт] => 4 ) ? Ума не приложу,что надо изменить. Эксперты помогите пожалуйста. Заранее спасибо
  • Вопрос задан
  • 217 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
...
$result=array();
$i = 0;
foreach($res as $r) {
  arsort($r);
  $result[$words[$i]] = key($r);
  $i++;
}
return $result;
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Lobotomist
@Lobotomist
Software Developer
Например, заменить
array_push($result,key($r));

на

// $r тут - номер слова в исходном массиве $words
$word = $words[$r];
$result[$word] = key($r);
Ответ написан
Комментировать
KorniloFF
@KorniloFF
Работаю по font-end / JS
print_t( array_combine($words, array_values($result)));

php.net/manual/ru/function.array-combine.php
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы