Не отображать строку, если строка перед ней похожа на текущую строку - PullRequest
2 голосов
/ 04 февраля 2012

Я не хочу выводить строку, если строка раньше похожа на текущую строку.Допустим, наши строки:

$strings = array("software","software","game","antivirus");

Моя функция разности,

function ($val1,$val2) {
similar_text($val1,$val2,$percent);
if ($percent>83) {
// should not echo. But don't know how to do.
}
}

Но я не знаю, как я могу это сделать.Я думаю, это должно быть с использованием для каждого.

Ответы [ 3 ]

2 голосов
/ 04 февраля 2012

Попробуйте что-то вроде этого:

$strings = array("software","software","game","antivirus");

$lastString = '';

foreach ($strings as $string) {
    similar_text($lastString, $string, $percent);
    if ($percent < 83) {
        echo "$string<br />";
        $lastString = $string;
    }
}

Если вы не понимаете какую-то его часть, оставьте комментарий, и я уточню.

Редактировать:
Я переместил $lastString = $string; внутрь условия.

Рассмотрим следующий список строк:
$strings = array("software","sofware","sofwart","ofwart","fwart","wart","warts");

Если оставить присваивание $lastString вне цикла, то будет напечатано только software, хотя многие слова очень сильно отличаются software, они не так отличаются от предыдущего слова.

Перемещение внутрь фактически дает вывод:

программное обеспечение
Софтварт
бородавка

1 голос
/ 04 февраля 2012

Подход, использующий array_filter() (предполагает> = 5,3):

$strings = array('software', 'software', 'game', 'antivirus');

$filtered = array_filter($strings, function($curr) {

    static $prev; 

    similar_text($prev, $curr, $percent);
    $prev = $curr;   

    if ($percent < 83) {
        return $curr;
    }        
});

print_r($filtered);

Урожайность:

Array
(
    [0] => software
    [2] => game
    [3] => antivirus
)

Надеюсь, это поможет. На самом деле, я никогда не знал о similar_text() до сих пор. Довольно интересная функция. Спасибо:)

1 голос
/ 04 февраля 2012
$strings = array("software","software","game","antivirus");
$previous = '';
foreach ($strings as $string) {
  if ($string===$previous) {
    continue;
  } else {
    echo $string;
    $previous = $string;
  }
}

Но я думаю, что лучше сделать это так (должно быть быстрее):

$strings = array("software","software","game","antivirus");
$num = count($strings);
for ($i=0;$i<$num;$i++) {
  if ($strings[$i]===$strings[$i-1] && $i!==0) {
    continue;
  } else {
    echo $strings[$i];
  }
}

Кстати, я совершенно не понял, что означает процент в долларах ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...