Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помогите сравнить строки многомерного массива со словами одномерным массивом

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Подробно внутри.
Webtest
Отправлено: 31 Августа, 2014 - 22:24:53
Post Id


Посетитель


Покинул форум
Сообщений всего: 286
Дата рег-ции: Июнь 2014  


Помог: 0 раз(а)




Здравствуйте.

Допустим есть одномерный массив:
PHP:
скопировать код в буфер обмена
  1. $wordsArr = Array ( [0] => проверка [1] => ветки [2] => релиз [3] => php)

И есть многомерный массив:
Спойлер (Отобразить)


Как сделать так: сравнить слова из строк многомерного массива со строками из одномерного массива, и если есть совпадение, то посчитать их в переменной с обозначением массива из многомерного массива. Звучит дико, но сейчас покажу как должно быть в данном примере:
Вывод должен быть примерно такой:
$check = 0;
$points = 3;
$dates = 23;
$tags = 0;
Т.е. скрипт проверяет есть ли слово из одномерного массива в массиве из многомерного массива, и если есть, то счетчик с названием опр. массива (например, из массива [dates] счетчик $dates) прибавляет столько, сколько слов нашел в элементах этого массива.
Как-то так, если что могу что не понятно пояснить!
Я тут уже часа 2 думаю над этим, единственное что в голову пришло - заюзать array_intersect_uassoc
Примерно так:
PHP:
скопировать код в буфер обмена
  1. foreach ($massive as $key => $string) {
  2.     array_intersect_uassoc($string, $wordsArr, "testFunc");
  3. }

И тут написать функцию, которая бы сравнивала строки 1 массива со словами 2 массива, что-то такое, но у меня мозгов на такое не хватает, пока.
(Добавление)
Ну или можно и так, что многомерный массив будет такой:
Спойлер (Отобразить)
 
 Top
zloy dyx
Отправлено: 31 Августа, 2014 - 23:07:58
Post Id



Гость


Покинул форум
Сообщений всего: 103
Дата рег-ции: Авг. 2014  
Откуда: Германия


Помог: 0 раз(а)

[+]


Ты идёш в правельном направлении
 
 Top
dcc0
Отправлено: 31 Августа, 2014 - 23:18:18
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




Может, это чем-то поможет автору темы. По материалам сайта php.su
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $all=0;
  4.   $empt=0;
  5.  
  6. $array1 = array ("a" => "green", "red", "blue", "sdas", "sd", "ток");
  7.  $array2 = array ("b" => "green Petrushka", "yellow rediska", "red Apple big Hahaha", "dkjfh  dfjhsd fhhf sdkjf", "поток");
  8.  
  9.  
  10.   foreach($array1 as $value) {
  11.  
  12.  
  13. foreach ($array2 as $val) {
  14.  
  15.  $haystack = $val;
  16.  
  17.    $needle   = $value;
  18.  
  19.  $pos      = strripos($haystack, $needle);
  20.  
  21. if ($pos === false) {
  22.  
  23.    echo "No ($needle)in ($haystack)<br/>";
  24.    $empt+=1;
  25.    
  26.    } else {
  27.  
  28.     echo "<b>Found</b> ($needle) in ($haystack) in($pos)<br/>";
  29. $all+=1;
  30.  
  31.         }
  32.  
  33.   }
  34. echo "All Found: " . $all;
  35.  echo " Empty: " . $empt;
  36.  }
  37.  
  38. ?>
  39.  
  40.  
  41.  


Но только есть одна проблема, если у нас в массиве есть слово ток, а в другом поток, то это будет считаться true.
Правда, решить можно так:
Вначале функции

В цикле:


Я перегнул как всегда. Функция не нужна, только вложенный цикл.

И нужно будет преобразовать многомерный массив в одномерный.

Со счетчиком, наверное, так: надо разбить многомерный массив на несколько одномерных
dates, check и т.д., затем последовательно, видимо, через функцию, сравнивать тот первый массив - назовем его массивом ключевых слов - с новыми одномерными. И тогда писать счетчики. Может быть здесь как-то может пригодиться array_walk или array_walk_recursive

(Отредактировано автором: 01 Сентября, 2014 - 11:08:46)



-----
Март 2021. Бросил программирование
 
 Top
Webtest
Отправлено: 01 Сентября, 2014 - 10:16:51
Post Id


Посетитель


Покинул форум
Сообщений всего: 286
Дата рег-ции: Июнь 2014  


Помог: 0 раз(а)




dcc0, сейчас буду пробовать, но вопроспока открыт.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB