создать массив PHP, используя fopen с добавлением

У меня возникли проблемы с выяснением того, как писать в файл, используя режим добавления fopen «a».

сам файл представляет собой простой массив PHP:

$array = array(
  "entry1"   => "blah blah",
  "entry2"   => "forbarbaz",
);   

достаточно просто. Таким образом, использование fopen со вторым аргументом, установленным на «a», должно позволить мне добавить файл с помощью fputs.... проблема заключается в открывающей и закрывающей строках, т.е. $array = array( и );

так что теперь файл должен выглядеть так:

  "entry1"   => "blah blah",
  "entry2"   => "forbarbaz",

как мне перестроить эти данные в работающий массив PHP, предполагая, что это просто текстовый файл со списком записей без открывающих и закрывающих строк? Извините, если это не ясно, это немного сложно. Нет, я не собираюсь хранить эти значения в БД, мне нужно преимущество в скорости, сохраняя эти конкретные значения в массиве файлов.

Итак, вопросы на самом деле заключаются в том, как мне создать полезный массив PHP из txt-файла с построчным списком, подобным этому?

Чтобы уточнить:

как мне получить текстовый файл с такими строками:

  "entry1"   => "blah blah",
  "entry2"   => "forbarbaz",

и есть работоспособный $php_array()????


person Nick    schedule 09.04.2012    source источник
comment
Я прочитал ваш вопрос 5 раз и до сих пор не понимаю, чего вы хотите достичь.   -  person Simon Forsberg    schedule 09.04.2012
comment
проверьте последний абзац вопроса   -  person Nick    schedule 09.04.2012
comment
@Nick Кажется, невозможно реализовать то, что вам нужно, без дополнительной головной боли. Вы не можете выполнить недопустимый php-код как php-код. Таким образом, вы должны либо работать с файлом, как с не-php файлом (т.е. eval его, как предложено в одном из ответов, или как-то прочитать его), либо сделать его действительным php-файлом, как я предложил.   -  person Botanick    schedule 09.04.2012
comment
Я не думаю, что это хороший способ сделать это, но, возможно, вы ищете что-то вроде... file_put_contents('./inc.array.php', ' entry1=›некоторое значение, '.\n, FILE_APPEND );   -  person Brian Bell    schedule 09.04.2012
comment
оба хороших комментария. Да проблема с добавлением в массив перед закрытием ); Сейчас я работаю по строкам txt файла и использую eval()   -  person Nick    schedule 09.04.2012


Ответы (4)


Попробуй это.

Формат файла (на начало работы с ним):

<?php
$array = array();

Теперь это правильный php-файл.

Затем просто добавьте новые строки следующим образом:

$f = fopen('myarray.php', 'a');
fputs($f, PHP_EOL.'$array["entry1"] = "value1";');
fclose($f);

И используйте его просто include('myarray.php');

person Botanick    schedule 09.04.2012
comment
Мне нравится это. Просто, но опять же, не совсем то, что я ищу. - person Nick; 09.04.2012
comment
Можете ли вы объяснить более подробно, что вы ищете? Решение Botanick предоставит вам файл с массивом значений, на который вы можете ссылаться после включения этого файла в другой документ. Не уверен, что еще вам нужно, основываясь на вашем первоначальном описании... - person Brian Bell; 09.04.2012
comment
так как это было ближе всего к решению, я собираюсь дать ответ Ботанику. В конце концов, я решил прочитать текущие значения массива и переписать весь массив. Хотя этот ответ позволил мне добавить элементы в массив в статическом файле, это привело к дублированию. - person Nick; 13.04.2012

Почему бы не json_encode массив, когда вы сохраняете его в файле, а затем json_decode JSON в массив, когда вы извлекаете его из файла?

json_encode
json_decode

person chapkom    schedule 09.04.2012
comment
нет, я не собираюсь менять механизм хранения данных, на самом деле JSON - это шаг в неправильном направлении и не решает проблему добавления. Этот файл будет постоянно обновляться с течением времени - он будет содержать некоторые значения языкового перевода. Меня не волнует, насколько тяжелым сервером будет создание этого массива, но его чтение должно быть максимально быстрым. - person Nick; 09.04.2012

Непроверенный. Попробуй это:

$data = file_get_contents('./data.txt', true);
$array = eval("array(".$data.")");

К вашему сведению, решение shiplu.mokadd.im самое простое.

person John Conde    schedule 09.04.2012

Возможно, вы ищете функцию fseek: http://se.php.net/fseek

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

person Simon Forsberg    schedule 09.04.2012
comment
В режиме добавления поведение fseeks не определено. Перечитайте ссылку которую вы дали - person Shiplu Mokaddim; 09.04.2012