С учетом ввода строк нам нужно создать очень простую форму сводки, обрезав конец строк до заданной длины.
Вот первая версия функции:
// Take an array of strings and generate a summary within a given length
function stringSummaryFromMetadata($inArray,$len=80,$sep='§'){
// Filter out 'false' values
$inputs=array_filter($inArray);
// First try just imploding array
$res=implode($sep,$inputs);
// Check for length
if(mb_strlen($res, 'utf8')>$len){
// Calculate 'z' the fixed width constant
$x=count($inputs);
$z=round(($len-$x)/$x);
// Snip all strings to 'z'
$t1=array();
foreach($inputs as $i) $t1[]=mb_substr($i,0,$z);
// Final answer
$res=implode($sep,$t1);
}
return $res;
}
Тест:
$test=array(
'Ligula diam risus tempus lorem sit',
'Cursus metus commodo enim odio orci',
'Metus sapien porta sapien fusce sodales',
'king queen'
);
$out=stringSummaryFromMetadata($test);
print $out;
Что дает:
Ligula diam risus t§Cursus metus
товар §Metus sapien porta §king королева
Это достаточно хорошо, но это может быть гораздо более оптимальным, я уверен в этом. Например, результат теста составляет менее 80 букв, пробел в конце строки после обрезки, слова обрезаются и т. Д.
Прежде чем я уйду по касательной и сверну свою собственную, я хотел бы спросить сообщество, спрашивалось ли об этом раньше и / или существует ли уже алгоритм для этого.