Задать вопрос
SW-EN
@SW-EN
W@P Блог Ч@Т

ПЕРЕБОР МАССИВА PHP — вложенные условия IF -?

Хелп - весь мозг поломал , как вложить условие в перебор массива, или ВНЕ его ,
но чтобы не было ложных срабатываний if , лишних переборов вариантов.


допустим массив
$arr["ТОСТЕР"] = "ТЕХНИКА";
$arr["МОЛОКО"] = "ПРОДУКТ";
$arr["РУБАШКА"] = "ОДЕЖДАТ";

подскажите пару вариантов, более грамотно - перебрать массивчик
if есть совпадения = даём ответ
if нет совпадений = записываем

foreach($arr as $key => $value)
{
if($key == "$message") { insert $value }
else { echo" НЕТ СОВПАДЕНИЙ"; // сколько элементов массива - столько раз выведется ; }
}
  • Вопрос задан
  • 1763 просмотра
Подписаться 1 Простой 5 комментариев
Решения вопроса 1
webinar
@webinar
Учим yii: https://youtu.be/-WRMlGHLgRg
но чтобы не было ложных срабатываний

а чего они должны быть? Где Ваш плохо работающий код, который надо оптимизировать?

подскажите пару вариантов, более грамотно - перебрать массивчик

Вы спрашиваете об оптимизации условий, а просите перебор. Вы определитесь что надо. Вангую:
https://www.php.net/manual/ru/function.in-array.php
или
https://www.php.net/manual/ru/control-structures.s...

if есть совпадения

чего с чем? Куда записываем, что значит "даем ответ"?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
dollar
@dollar
Делай добро и бросай его в воду.
Если вам нужна схожесть, а не просто точное совпадения, то это сложная задача. Есть множество алгоритмов подсчёта схожести, на любой вкус и цвет. В зависимости от ваших условий, можете взять любой или даже изобрести свой.
Простой пример с помощью функции similar_text
<?php
$arr=[];
$arr["ТОСТЕР"] = "ТЕХНИКА";
$arr["МОЛОКО"] = "ПРОДУКТ";
$arr["РУБАШКА"] = "ОДЕЖДАТ";

$text_to_find = 'рубаш';

$maximum = 0; //Процент совпадения
$answer = ''; //Ответ
foreach($arr as $key => $value) 
{
    similar_text(mb_strtolower($key), mb_strtolower($text_to_find), $perc);
    if ($perc > $maximum) {
        $maximum = $perc;
        $answer = $value;
    }
}
if ($maximum > 70) { //Если совпадение хотя бы 70%
    echo $answer." с шансом $maximum%";
} else { //Иначе считается, что ничего не нашли
    echo("Нет совпадений! Но могло бы быть $answer с шансом $maximum%");
}
?>

Результат: ОДЕЖДАТ с шансом 83.333333333333%

Но есть и другие функции, например levenshtein(), которая вычисляет расстояние Левенштейна и так далее.

P.S. Пожалуйста, отмечайте хорошие ответы решениями. Люди же стараются, пишут для вас. Это касается предыдущих вопросов тоже.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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