Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.09.2017, 18:48
Профессор
Отправить личное сообщение для Sonya Посмотреть профиль Найти все сообщения от Sonya
 
Регистрация: 07.07.2016
Сообщений: 197

Поиск части слова
Здравствуйте!
Помогите, пожалуйста, с такой задачей:
Для поиска повторяющегося набора цифр (кода), использую такой код:
$file=file("test.txt");
    $str=$file[0];
    $array=explode(",",$str);
	$value=1;
    if(($key = array_search($value,$array)) !== FALSE){
     unset($array[$key]);
     }
    $first_array = array_count_values($array);
    $second_array = array_diff($first_array, [$value]);
    var_dump($second_array);

который выводит, число вхождений (повторений) кода. Задача в том, что $file=file("test.txt"); ищет строгое соответствие, а надо, скажем, при совпадении, например, первых 5 цифр (как по маске), чтобы считался повтор. Как это можно реализовать?
Ответить с цитированием
  #2 (permalink)  
Старый 06.09.2017, 19:15
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 976

Сообщение от Sonya
$file=file("test.txt"); ищет строгое соответствие,
Функция «file» ничего не ищет, а читает файл, разбивает его по строчкам и возвращает массив этих строк.

Что нужно сделать не понял.
Ответить с цитированием
  #3 (permalink)  
Старый 06.09.2017, 19:23
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 7,430

Сообщение от Sonya
$str=$file[0];
$array=explode(",",$str);
Здесь $str живет короче мгновения и далее используется один раз, зачем же вы ее определяете, а не сразу?

$array = explode(",", $file[0]);


Сообщение от Sonya
первых 5 цифр (как по маске)
Какой маске?
Ответить с цитированием
  #4 (permalink)  
Старый 06.09.2017, 19:45
Профессор
Отправить личное сообщение для Sonya Посмотреть профиль Найти все сообщения от Sonya
 
Регистрация: 07.07.2016
Сообщений: 197

По как по "маске" - имела ввиду соответствие, но не строгое, поэтому "как". Да можно без "$str", сделать сразу, осталось, т.к. код несколько раз трансформировался. Безусловно, функция «file» ничего не ищет. А сделать нужно, чтобы код выполнял ту же работу, что и сейчас, с той лишь разницей, что сейчас поиск вхождений ищет идентичность строк кода 1234567, а надо, чтобы принимался код, например, и 1234576, или 1234598 и т.д.
Ответить с цитированием
  #5 (permalink)  
Старый 06.09.2017, 19:49
Профессор
Отправить личное сообщение для Sonya Посмотреть профиль Найти все сообщения от Sonya
 
Регистрация: 07.07.2016
Сообщений: 197

Т.е., например, 5 цифр кода при повторе кода, принимались в строгом соответствии, а последующие не имели принципиального значения.
Ответить с цитированием
  #6 (permalink)  
Старый 06.09.2017, 20:37
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 976

Sonya, нужно что-то типа этого?
<?php
    $haystack=array('123456','123789','124987','321654');
    $needle='123';
    $result=array();
    
    $charset='UTF-8';
    $needle_length=mb_strlen($needle,$charset);
    foreach($haystack as $string){
        if(mb_substr($string,0,$needle_length,$charset)==$needle)
            $result[]=$string;
    }
    
    var_dump($result);
    exit;
Ответить с цитированием
  #7 (permalink)  
Старый 06.09.2017, 20:44
Профессор
Отправить личное сообщение для Sonya Посмотреть профиль Найти все сообщения от Sonya
 
Регистрация: 07.07.2016
Сообщений: 197

Дело в том, что я не знаю цифры кодов в массиве, они будут выводиться, только в случае повтора.

Последний раз редактировалось Sonya, 06.09.2017 в 20:48. Причина: Добавлено
Ответить с цитированием
  #8 (permalink)  
Старый 06.09.2017, 21:00
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 7,430

Nexus,
цифры, латиница, управляющие символы в монгобайтной кодировке все равно занимают один байт, $charset='UTF-8' и mb_strlen для них совсем не требуется.

Последний раз редактировалось laimas, 06.09.2017 в 21:05.
Ответить с цитированием
  #9 (permalink)  
Старый 06.09.2017, 21:05
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 7,430

Сообщение от Sonya
надо, чтобы принимался код, например, и 1234576, или 1234598
Сообщение от Sonya
Дело в том, что я не знаю цифры кодов в массиве
Значит ищите по совпадениям - совпали первые N у набора М, это один набор, совпали К у набора I, это другой набор. Так что-ли или "маска" фиксированная по длине?
Ответить с цитированием
  #10 (permalink)  
Старый 06.09.2017, 21:17
Профессор
Отправить личное сообщение для Sonya Посмотреть профиль Найти все сообщения от Sonya
 
Регистрация: 07.07.2016
Сообщений: 197

Сообщение от laimas Посмотреть сообщение
Значит ищите по совпадениям - совпали первые N у набора М, это один набор
- в этом и проблема - реализовать применимо к коду. С чего начать?
Сообщение от laimas Посмотреть сообщение
Так что-ли или "маска" фиксированная по длине?
- да, будет по длине фиксированной.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление всех &nbsp; из текста (поиск и удаление любого слова из текста) Stenli jQuery 5 28.06.2017 20:47
Поиск слова по заглавной букве Vladislav306907 jQuery 7 25.04.2016 17:34
Поиск слова на странице (javascript) Корделия Элементы интерфейса 9 15.08.2013 17:44
Поиск слова в исходном коде html страницы klsorat2010 Ваши сайты и скрипты 1 20.05.2010 23:46
Поиск последнего слова в строке AlexFadeev Элементы интерфейса 3 01.04.2010 18:56