Php массив в файл как массив

Обновлено: 03.07.2024

Я хотел бы, чтобы файл выглядел точно так же, как выглядит этот код.

print_r ($abc); при условии, что $ abc является массивом.

Есть ли какое-то решение для одной линии, а не обычное для каждого взгляда.

P.S. В настоящее время я использую сериализацию, но я хочу сделать файлы читаемыми, так как с сериализованными массивами читаемость довольно сложна.

Либо var_export , либо установите print_r , чтобы вернуть вывод вместо его печати.

Затем вы можете сохранить $results с помощью file_put_contents . Или верните его напрямую при записи в файл:

Просто используйте print_r ; ) Прочитайте документация :

Если вы хотите захватить вывод print_r() , используйте параметр return . Если для этого параметра задано значение TRUE , print_r() будет возвращать информацию, а не печатать ее.

Так что это одна из возможностей:

file_put_contents($file, print_r($array, true), FILE_APPEND)

Вы можете попробовать:

Быстро и просто сделайте это:

Вы можете попробовать это, $myArray как массив

Я только что написал эту функцию для вывода массива в виде текста:

Должен выводить красиво отформатированный массив.

Остерегайтесь пользовательского ввода.

Этот скрипт был создан для внутреннего использования.

Если вы намереваетесь использовать это для публичного использования, вам нужно будет добавить дополнительную проверку данных, чтобы предотвратить внедрение скрипта.

Это не является надежным доказательством и должно использоваться только с доверенными данными.

Следующая функция выведет что-то вроде:

вот функция (примечание: функция в настоящее время отформатирована для реализации oop.)

Вы также можете использовать этот скрипт, который я также написал некоторое время назад:

Это хорошо, чтобы скопировать и вставить части массива.

(Было бы почти невозможно сделать это с сериализованным выводом)

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

Этот будет выводить следующим образом:

Также позаботьтесь о пользовательском вводе. Вот код.

просто используйте file_put_contents('file',$myarray); file_put_contents () также работает с массивами.

Ниже должно работать хорошо и более читабельно, используя <pre>

Вот то, что я узнал за последние 17 часов, что решило мою проблему при поиске аналогичного решения.

ресурсы:

То, что я взял выше, $ arr [fruit] может идти внутрь "" (двойные кавычки) и приниматься в качестве строки PHP для дальнейшей обработки.

Это вторая вещь, которую я не знал, FILE_APPEND.

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

Теперь мне нужно только знать, как удалить данные из файла перед добавлением обновленных данных.

О других решениях:

Просто так, чтобы это могло быть полезно для других людей; когда я пытался var_export или Print_r или Сериализуйте или Json.Encode , я либо получил специальные символы, такие как => или; или 'или [] в файле или какая-то ошибка. Перепробовал слишком много вещей, чтобы запомнить все ошибки. Поэтому, если кто-то захочет попробовать их снова (может иметь другой сценарий, чем мой), он может ожидать ошибки.

О чтении файла, редактировании и обновлении:

Я использовал функцию fgets () для загрузки массива файлов в переменную ($ array) , а затем используйте unset ($ array [x]) (где x обозначает желаемый номер массива, 1,2,3 и т. д.) для удаления конкретный массив. Затем используйте array_values ​​() , чтобы переиндексировать и загрузить массив в другую переменную, а затем используйте цикл while и выше решения для сброса массива (без каких-либо специальных символов) в целевой файл.

Однако op должен записать массив в том виде, в каком он есть в файле. Я нашел эту страницу, чтобы найти решение, в котором я могу записать массив в файл, а затем легко прочитать позже, снова используя php.

Я нашел решение сам с помощью json_encode, так что кто-то еще ищет тот же код:

Примеры сохранения и чтения текстовых данных и массивов в файлы.

Сохранение в файл

Функция file_put_contents() записывает содержимое переменной в файл, если файла не существует. то пытается его создать, если существует то полностью перезапишет его.

File_put_contents:

Fopen / fwrite:

Набор функций fopen, fwrite, fclose предназначены для более гибкой работы с файлами.

  • fopen – открытие или создание файла.
  • fwrite – запись данных.
  • fclose – закрытие файла.

Возможные режимы fopen():

Mode Описание
r Открывает файл только для чтения, помещает указатель в начало файла.
r+ Открывает файл для чтения и записи, помещает указатель в начало файла.
w Открывает файл только для записи, помещает указатель в начало файла и обрезает файл до нулевой длины. Если файл не существует – пробует его создать.
w+ Открывает файл для чтения и записи, помещает указатель в начало файла и обрезает файл до нулевой длины. Если файл не существует – пытается его создать.
a Открывает файл только для записи, помещает указатель в конец файла. Если файл не существует – пытается его создать.
a+ Открывает файл для чтения и записи, помещает указатель в конец файла. Если файл не существует – пытается его создать.
x Создаёт и открывает только для записи; помещает указатель в начало файла. Если файл уже существует, вызов fopen() закончится неудачей, вернёт false и выдаст ошибку. Если файл не существует, попытается его создать.
x+ Создаёт и открывает для чтения и записи, в остальном имеет то же поведение, что и « x ».
c Открывает файл только для записи. Если файл не существует, то он создаётся. Если же файл существует, то он не обрезается (в отличие от « w »), и вызов к этой функции не вызывает ошибку (также как и в случае с « x »). Указатель на файл будет установлен на начало файла.
c+ Открывает файл для чтения и записи, в остальном имеет то же поведение, что и « c ».

Доступно в место fwrite() используют fputs() , разницы ни какой т.к. эта функция является псевдонимом.

Замечание:

Можно также использовать функцию file_get_contents() для получения файла в виде строки.

Список параметров

Для этой функции вы можете использовать URL в качестве имени файла, если была включена опция fopen wrappers. Смотрите более подробную информацию об определении имени файла в описании функции fopen() . Смотрите также список поддерживаемых оберток URL, их возможности, замечания по использованию и список предопределенных констант в Поддерживаемые протоколы и обработчики (wrappers).

В качестве необязательного параметра flags может можно указать одну или более следующих констант: FILE_USE_INCLUDE_PATH Ищет файл в include_path. FILE_IGNORE_NEW_LINES Не добавлять новую строку к концу каждого элемента массива FILE_SKIP_EMPTY_LINES Пропускать пустые строки

Ресурс контекста, созданный функцией stream_context_create() .

Замечание: Поддержка контекста была добавлена в PHP 5.0.0. Для описания контекстов смотрите раздел Потоки.

Возвращаемые значения

Возвращает файл в виде массива. Каждый элемент массива соответствует строке файла, с символами новой строки включительно. В случае ошибки file() возвращает FALSE .

Замечание:

Каждая строка в полученном массиве будет завершаться символами конца строки (если вы не указали флаг FILE_IGNORE_NEW_LINES ), поэтому, если вам будет нужно избавиться от этих символов, вы можете использовать функцию rtrim() .

Замечание: Если у вас возникают проблемы с распознаванием PHP концов строк при чтении или создании файлов на Macintosh-совместимом компьютере, включение опции auto_detect_line_endings может помочь решить проблему.

Список изменений

Версия Описание
4.3.0 file() стала безопасной для обработки бинарных данных

Примеры

I think your first, main example is needlessly confusing, very confusing to newbies:

It should be removed.

For newbies:
An array index can be any string value, even a value that is also a value in the array.
The value of array["foo"] is "bar".
The value of array["bar"] is "foo"

The following expressions are both true:
$array["foo"] == "bar"
$array["bar"] == "foo"

Since PHP 7.1, the string will not be converted to array automatically.

Below codes will fail:

$a=array();
$a['a']='';
$a['a']['b']='';
//Warning: Illegal string offset 'b'
//Warning: Cannot assign an empty string to a string offset

You have to change to as below:

$a['a']=array(); // Declare it is an array first
$a['a']['b']='';

Beware that if you're using strings as indices in the $_POST array, that periods are transformed into underscores:

<html>
<body>
<?php
printf ( "POST: " ); print_r ( $_POST ); printf ( "<br/>" );
?>
<form method="post" action default"><?php echo $_SERVER [ 'PHP_SELF' ]; ?> ">
<input type="hidden" name="Windows3.1" value="Sux">
<input type="submit" value="Click" />
</form>
</body>
</html>

Once you click on the button, the page displays the following:

POST: Array ( [Windows3_1] => Sux )

"If you convert a NULL value to an array, you get an empty array."

This turns out to be a useful property. Say you have a search function that returns an array of values on success or NULL if nothing found.

<?php $values = search (. ); ?>

Now you want to merge the array with another array. What do we do if $values is NULL? No problem:

<?php $combined = array_merge ((array) $values , $other ); ?>

Voila.

Note that array value buckets are reference-safe, even through serialization.

<?php
$x = 'initial' ;
$test =array( 'A' =>& $x , 'B' =>& $x );
$test = unserialize ( serialize ( $test ));
$test [ 'A' ]= 'changed' ;
echo $test [ 'B' ]; // Outputs "changed"
?>

This can be useful in some cases, for example saving RAM within complex structures.

--- quote ---
Note:
Both square brackets and curly braces can be used interchangeably for accessing array elements
--- quote end ---

At least for php 5.4 and 5.6; if function returns an array, the curly brackets does not work directly accessing function result, eg. WillReturnArray() . This will give "syntax error, unexpected 'Personally I use only square brackets, expect for accessing single char in string. Old habits.

Regarding the previous comment, beware of the fact that reference to the last value of the array remains stored in $value after the foreach:

<?php
foreach ( $arr as $key => & $value )
$value = 1 ;
>

// without next line you can get bad results.
//unset( $value );

$value = 159 ;
?>

Now the last element of $arr has the value of '159'. If we remove the comment in the unset() line, everything works as expected ($arr has all values of '1').

Bad results can also appear in nested foreach loops (the same reason as above).

So either unset $value after each foreach or better use the longer form:

//array keys are always integer and string data type and array values are all data type
//type casting and overwriting(data type of array key)
//----------------------------------------------------
$arr = array(
1=>"a",//int(1)
"3"=>"b",//int(3)
"08"=>"c",//string(2)"08"
"80"=>"d",//int(80)
"0"=>"e",//int(0)
"Hellow"=>"f",//string(6)"Hellow"
"10Hellow"=>"h",//string(8)"10Hellow"
1.5=>"j",//int(1.5)
"1.5"=>"k",//string(3)"1.5"
0.0=>"l",//int(0)
false=>"m",//int(false)
true=>"n",//int(true)
"true"=>"o",//string(4)"true"
"false"=>"p",//string(5)"false"
null=>"q",//string(0)""
NULL=>"r",//string(0)"" note null and NULL are same
"NULL"=>"s",//string(4)"NULL" . In last element of multiline array,comma is better to used.
);
//check the data type name of key
foreach ($arr as $key => $value) var_dump($key);
echo "<br>";
>

//NOte :array and object data type in keys are Illegal ofset.

Don't know if this is known or not, but it did eat some of my time and maybe it won't eat your time now.

I tried to add something to a multidimensional array, but that didn't work at first, look at the code below to see what I mean:

$a1 = array( "a" => 0 , "b" => 1 );
$a2 = array( "aa" => 00 , "bb" => 11 );

$together = array( $a1 , $a2 );

foreach( $together as $single ) <
$single [ "c" ] = 3 ;
>

foreach( $together as $key => $value ) <
$together [ $key ][ "c" ] = 3 ;
>

Used to creating arrays like this in Perl?

Looks like we need the range() function in PHP:

<?php
$array = array_merge (array( 'All' ), range ( 'A' , 'Z' ));
?>

You don't need to array_merge if it's just one range:

In array(key=>value) construct key is also an expression.
This works fine:
$a = array(
1 =>0,
1+1 =>1,
$k =>2,
$x.'4'=>3
);

There is another kind of array (php>= 5.3.0) produced by

$array = new SplFixedArray(5);

Standard arrays, as documented here, are marvellously flexible and, due to the underlying hashtable, extremely fast for certain kinds of lookup operation.

Supposing a large string-keyed array

$arr=['string1'=>$data1, 'string2'=>$data2 etc. ]

when getting the keyed data with

php does *not* have to search through the array comparing each key string to the given key ('string1') one by one, which could take a long time with a large array. Instead the hashtable means that php takes the given key string and computes from it the memory location of the keyed data, and then instantly retrieves the data. Marvellous! And so quick. And no need to know anything about hashtables as it's all hidden away.

However, there is a lot of overhead in that. It uses lots of memory, as hashtables tend to (also nearly doubling on a 64bit server), and should be significantly slower for integer keyed arrays than old-fashioned (non-hashtable) integer-keyed arrays. For that see more on SplFixedArray :

Unlike a standard php (hashtabled) array, if you lookup by integer then the integer itself denotes the memory location of the data, no hashtable computation on the integer key needed. This is much quicker. It's also quicker to build the array compared to the complex operations needed for hashtables. And it uses a lot less memory as there is no hashtable data structure. This is really an optimisation decision, but in some cases of large integer keyed arrays it may significantly reduce server memory and increase performance (including the avoiding of expensive memory deallocation of hashtable arrays at the exiting of the script).

Читайте также: