2016-07-20 3 views
1

Я пишу идент в текстовом файл разделенного с || УАКОМ $UserID представляет собой целое число, как 1, 2, 3 и т.д.как проверить, если значение уже существует в текстовом файле

Если пользователь имеет идентификатор 1; значение сохраняется в текстовом файле и выглядит через какое-то время, как это:

1||1||1||1||1||...

Что я хочу достичь: если ID уже хранится в текстовом файле, не храните его снова.

это то, что у меня есть.

$UserIdtxt = $UserID."||"; 


$ID = explode("||", file_get_contents("user_id.txt")); 
    foreach($ID as $IDS) { 

// here must come the check if the ID already is stored in the txt file 
    if($IDS != $UserID) { 
    file_put_contents("user_id.txt", $UserIdtxt, FILE_APPEND); 

    } 
    } 

Как я могу сделать эту проверку?

+2

, прежде чем зайти слишком далеко в решение этой проблемы, рассмотрели ли вы использование системы управления базами данных? –

ответ

3

Все, что вам нужно сделать, это испытание, если новый идентификатор aleady в разобранном массиве с использованием in_array()

$UserIdtxt = $UserID."||"; 

$all_ids = explode("||", file_get_contents("user_id.txt")); 

if (! in_array($UserID, $all_ids)) { 
    file_put_contents("user_id.txt", $UserIdtxt, FILE_APPEND); 
} 

Но это ужасный способ хранения такого рода информации

+0

Flat-файл может быть * yuck *, но быстро. –

+2

@ RokoC.Buljan Не когда в файле 10000 идентификаторов. Тогда его просто громоздкий беспорядок – RiggsFolly

+0

Это прекрасно работает. Но я согласен; более правильно помещать данные в базу данных –

0

Пробуйте хорошо убедиться, что файл был успешно прочитан, прежде чем сканировать его.

if($source = file_get_contents("user_id.txt"){ 
    if(!preg_match("/^($UserID|.*\|\|$UserID)/", $source){ 
     ... //add id to file 
    } 
}else{/*Todo: handle file-open failure*/} 
Смежные вопросы