[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: поиск по массиву на совпадение начала строки
mi.rafaylik
Добрый вечер джентльмены )
Получаю массив строк из файла, с помощью:
$followersList = file($filePath);

Массив содержит строки, каждая из которых состоит из трёх параметров, разделённых двоеточием, например:
info@company.com:UserOne:0-0-1-0
name@gmail.com:UserSecond:1-1-0-1

При добавлении нового элемента массива я использую array_shift() для добавления нового элемента (строки) в массив. Но если добавляемый элемент содержит уже имеющийся в массиве email? Мне нужно проверить каждую строку массива, до символа первого двоеточия, на совпадение с добавляемым email, и если совпадение найдено, обновить данный элемент (строку) массива (т.к. параметры, кроме email, могут быть обновлены).
Есть множество вариантов, например array_walk() совместно с substr(), есть также перебор foreach, и т.д.
Посоветуйте пожалуйста, каким способом правильнее и проще решить мою задачу.
Valick
Цитата
каким способом правильнее и проще решить мою задачу

использовать базу данных mysql
или хотябы http://ru.wikipedia.org/wiki/SQLite
___
если надо именно с файлами, то
- читаете файл в массив
- foreach обходите все строки и в цикле
--- разбиваете строку на массив при помощи explode
--- находите нужный email
--- меняете значения этого массива на новые
--- собираете строку при помощи implode
--- устанавливаете флаг того что была замена
--- (тут можно оборвать цикл break(), если значения уникальны, зачем проверять остальные если уже заменили и больше совпадений быть не может)
- конец цикла
- проверяете было ли обновление, если нет, то добавляете новую запись в конец и сортируете массив
- записываете массив в файл

_____________
Стимулятор ~yoomoney - 41001303250491
mi.rafaylik
мм, explode/implode, действительно. спасибо)
Игорь_Vasinsky
Цитата
- читаете файл в массив
- foreach обходите все строки и в цикле


если файл большой - то читай построчно с fgets - и сразу работай с каждой строкой

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Valick
Игорь_Vasinsky, код нарисуете? помница некоторое время назад у вас были проблемы со смещением smile.gif хотите повторить?
Я описал самый простой вариант, а по хорошему использовать БД в данной ситуации самое оно.


_____________
Стимулятор ~yoomoney - 41001303250491
mi.rafaylik
с телефона вижу так, нужно будет проверить дома:
$followersList = file($filePath);
foreach($followersList as $followerStr){
$followerBreakStr = explode(':', $followerStr);
// здесь выполнять проверку на совпадение в подмассивах $followerBreakStr
}

содержимое читаемого файла:
info@company.com:UserOne:0-0-1-0
name@gmail.com:UserSecond:1-1-0-1
// и т.д.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.