Php передать массив в другой файл

Обновлено: 03.07.2024

Итак, мы снова продолжаем изучение основ PHP и в этой статье познакомимся со способами передачи переменных в PHP, а именно с методами GET и POST. Каждый из них имеет свои плюсы и минусы, и применяется в соответствующих ситуациях, речь о которых пойдет в данной статье. Мы также рассмотрим примеры кода, которые демонстрируют работу методов POST и GET.

Передача переменных при помощи метода GET

Данный метод передачи переменных применяется в PHP для передачи переменных в файл при помощи адресной строки. То есть переменные передаются сразу через адресную строку браузера. Примером может быть, например, ссылка на статью в WordPress без использования ЧПУ (SEF), которая имеет примерно следующий вид:

То есть в данном случае передается переменная $p со значением 315. Теперь давайте более подробно на примере рассмотрим работу метод GET. Пускай нам нужно передать в файл три переменных $a, $b и $c методом GET и вывести их сумму на экран. Для этого можно использовать следующий код.

Поскольку все переменные перед передачей будут помещаться в глобальный массив GET (Массивы в PHP), то мы первым делом присваиваем нашим переменным значения соответствующих элементов массива GET. Делаем это в самом начале во избежание разнообразных ошибок при передаче переменных. Далее для демонстрации работы прописываем произвольную формулу и выводим результат на экран.

Как видно с примера, сначала мы добавляем знак вопроса сразу после названия файла. Далее прописываем переменную и через равно указываем ее значение. После этого через амперсанд аналогичным образом перечисляем другие переменные. Теперь при переходе по этой ссылке нам выведется сумма переменных $a, $b и $c.

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

Ну а теперь давайте перейдем ко второму способу передачи переменных в PHP – методу POST.

Передача переменных в PHP при помощи метода POST

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

Код первого файла с формой для отправки данных. Дадим ему название post-1.php

  • action – указываем файл, в который будут передаваться переменные.
  • method – метод передачи переменных. В нашем случае это метод POST.
  • name – название формы. Одновременно в файл будет передана переменная с таким именем.
  • name – имена переменных. В нашем случае это имя и фамилия (переменные name и lastname).
  • type – тип поля. В нашем случае это текстовое поле.
  • name – имя кнопки и переменной, которая будет передана вместе с другими переменными.
  • type – тип кнопки. В нашем случае это кнопка для отправки данных.
  • value – текст на кнопке.

Код второго файла, который будет служить приемником переменных. Назовем его post-2.php

Как и с методом GET, мы первым делом присваиваем переменным значения соответствующих элементов глобального массива POST. Далее для наглядности выводим эти переменные на экран при помощи оператора вывода echo.

Вернее все способы записи массива в файл! Есть возможность без дополнительных манипуляций записать простой массив в файл! Данный массив будет записываться построчно! И второй способ это запись вообще любого массива с помощью функции!

Все способы записи массива в файл

Запись массива в файл построчно!

Прежде чем перейти к анонсированной теме пункта - важное :

Массив в файл можно сохранить в виде(type) строки(string). Поскольку массив не является строкой, а является типом array, то прежде чем записывать в файл, его(массив) нужно превратить в строку.

Подробно запись/сохранение массива в файл построчно!

Данный пример работает только для одномерного массива - его и возьмем в качестве примера для сохранения в файл . нам понадобится:

Нам нужен пример одномерного массива, который будем записывать в файл присвоим его к переменной :

Для записи массив а в файл на понадобится функция file_put_contents

Но! Если мы создадим вот такую запись, как в обычной записи в файл, то у нас запишется не совсем так, как нам требуется.

file_put_contents("example_array_in_file.dat" , $new_array);

А получим, что массив запишется все в кучу одной строки, специально сделал запись в файл именно таким образом! Вот, что у нас получилось : Пример 1 Это не совсем то, что нам нужно! Вернее совсем не то!

Нам нужно, чтобы последующая ячейка записывалась с новой строки! Как это вообще можно сделать!? Нам потребуется функция implode, и если мы сделаем из массива строку с переносом, то мы получим вот такую функцию в сборе для записи массива построчно:

file_put_contents("example_array_in_file.dat" , implode("\r\n", $new_array ));

Пример записанного массива построчно и сохраненного в файл:

И если сейчас мы посмотрим на тот же массив, который записан в файл, то мы увидим совершенно другую, интересную ситуацию:

Как восстановить оригинальный массив из сохраненного в файл?

Как записать простой массив в файл в строку с разделителем!?

Следующий пример записи массива в файл также пригоден только для одномерного массива.

Этот вариант несколько отличается от выше приведенного.

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

Возьмем все тот же одномерный массив:

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

В качестве разделителя рекомендую использовать редкие знаки, которые никогда не будут повторяться в тексте, инче, при возврате строки в массив, вы получите не оригинальный массив. Рекомендую подбирать разделитель в таблице символов. Для примера используем разделить - знак умножения "*":

file_put_contents("example_array_in_file.dat" , implode("*", $new_array ));

Пример записи массива в строку с разделителем:

Как восстановить оригинальный массив из сохраненного в файл?

Как записать любой массив в файл!?

Как уже выше было сказано, что нам нужно превратить массив вс троку(для записи) и. существует функция, которая превращает строку в массив - serialize. Просто берем любой - абсолютно любой массив и превращаем его в строку, а уж записать строку в файл - это просто!

Сохраняем массив в файл:

Нам понадобится массив, но мы возьмем чуть посложнее массив например ассоциативный!

Как записать ассоциативный массив в файл!?

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

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

Ну далее напишем опять конструкцию для записи ассоциативного массива в файл :

file_put_contents("example_array_in_file_3.dat" , serialize ( $array_ass ));

$декодированный_массив = unserialize(file_get_contents('example_array_in_file_3.dat'));//декодирование в массив

Как записать многомерный массив в файл!?

Берем любой многомерный массив, с любым количеством включений.

И поступаем аналогично! ВСЁ!ВСЁ! Одинаково, что мы делали в предыдущем пункте!

$многомерный_массив = array(array(array array array) array(array array array) array(array array array) ) ;

Подготовка массива для передачи на другую страницу.

Мы делаем только живые примеры, поэтому - создадим какой-то массив, для того, чтобы его передать в другую часть сайта или на другую страницу!

Простой массив не интересен - давайте создадим ассоциативный - не будем подробно останавливаться на моменте создания массива:

$example_arr[$id_page][data] = date('d.m.Y H:i:s');

$example_arr[$id_page][title_page] = 'пример заголовка';

$example_arr[$id_page][text] = 'пример текста';

Выведем массив, который будем передавать!

Теперь, давайте посмотрим на выше приведенный массив! Выведем его с помощью print_r

Результат вывода массива, который будем передавать!

Как передать массив с помощью сессии?

Теперь, когда у нас готов массив, нам нужна сессия и мы данный массив поместим туда, в сессию.

Не мудрствуя лукаво, сессию назовем также, как и наш массив.

И поскольку в сессии находится массив, то мы его тоже будем выводить с помощью print_r, вот таким образом:

Давайте его здесь прямо таки выведем, посмотрим, есть ли что-то в нашей сессии:

Результат вывода передаваемого массива в сессии:

Для проверки живого скрипта - перезагрузите страницу и обратите внимание на ячейку "data" - у неё есть показатель секунды.

Отлично. сессия прекрасно сработала и массив помещен в сессию !

Теперь нам нужно получить данный массив где-то в другом месте. используя get

нам понадобится ссылка типа:

Передаем массив с помощью Метода

Для того, чтобы нам проделать аналогичную операцию, что описана выше - передать массив ан другую страницу или в любую другую часть сайта, нам понадобится метод post и :два скрипта:

А второй скрипт получит этот массив на другой странице!

Массив будем передавать, что уже выше создали. давайте напомним его и выведем его здесь:

Один из вариантов. разобрать данный массив по ячейкам и на каждую ячейку создать свои input - но у данного способа есть один главный недостаток. при изменении количества ячеек - естественно нужно прописывать новый инпут, а если у вас 10 инпутов или количество инпутов переменное - в общем, этот способ даже рассматривать не буду. из-за своей ущербности.

Что мы будем делать!?

Мы преобразуем массив в строку и уже её спокойненько вернем массив на второй странице!

Давайте уже приступать! Нам понадобится.

И внутри один input с submit

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

<form method="post" action="адрес">
<button name="submit" type="submit" value="здесь массив"></button>
</form>

Далее в value нам нужно поместить наш массив. Но прежде его нужно перегнать в строку с помощью serialize и. далее у вас возникнет ошибка кавычек. (вопрос на засыпку. почему!?), поэтому нам нужна другая функция str_replace, а вообще. лучше написать свою функцию, чтобы не использовать эти две. :

Для замены я использовал "Æ" - это в принципе не важно, лишь бы элемент не повторялся в самом массиве, иначе массив получим кривой.

function str_plus_serialize($value)
return str_replace('"', 'Æ', serialize($value) );
>

Давайте пропустим наш массив через данную функцию:

И нам понадобится страница на которой мы проделаем все те операции с функциями в обратном порядке. это довольно скучно см. второй файл в архиве.

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