преобразование массива в строку php
PHP: конвертирование массива в строку
В этой статье разберем как преобразовывать массив в строку и обратно.
Есть два способа преобразовать массив в строку в PHP.
Использование функции implode()
Используя функцию implode(), мы можем преобразовать все элементы массива в строку. Параметр разделителя в функции implode() является необязательным. Но хорошей практикой будет использовать оба аргумента.
В приведенном выше примере в первой строке объявлена переменная массива и ей присвоены некоторые значения.
Вы также можете преобразовать полученную строку если требуется обратно в массив. Для этого мы можем использовать функцию PHP explode().
Функция explode()
Используя функцию explode(), мы можем преобразовать строку в элементы массива. Мы можем передать три аргумента. Первый разделитель, второй массив и последний лимит (ограничение длинны).
В приведенном выше примере строковой переменной присваивается некоторое значение. Затем функция explode() разбивает эту строку на массив. После этого мы использовали функцию print_r(), которая печатает все элементы массива и его индексы.
Использование функции json()
В PHP объекты могут быть преобразованы в строку JSON с помощью функции json_encode().
В приведенном выше примере мы присвоили значение переменной объекта, а затем в json_encode() преобразовали значение в переменную массива и создали ассоциативный массив.
implode
(PHP 4, PHP 5, PHP 7, PHP 8)
implode — Объединяет элементы массива в строку
Описание
Альтернативная сигнатура (не поддерживается с именованными аргументами):
Устаревшая сигнатура (устарела с PHP 7.4.0, удалена в PHP 8.0.0):
Список параметров
По умолчанию равен пустой строке.
Массив объединяемых строк.
Возвращаемые значения
Возвращает строку, содержащую строковое представление всех элементов массива в указанном порядке, с разделителем между каждым элементом.
Список изменений
Версия | Описание |
---|---|
8.0.0 | Передача separator после array больше не поддерживается. |
7.4.0 | Передача separator после array (т.е. использование недокументированного порядка параметров) устарела. |
Примеры
Пример #1 Пример использования implode()
Примечания
Замечание: Эта функция безопасна для обработки данных в двоичной форме.
Смотрите также
User Contributed Notes 14 notes
it should be noted that an array with one or no elements works fine. for example:
It’s not obvious from the samples, if/how associative arrays are handled. The «implode» function acts on the array «values», disregarding any keys:
declare( strict_types = 1 );
Can also be used for building tags or complex lists, like the following:
?>
This is just an example, you can create a lot more just finding the right glue! 😉
It might be worthwhile noting that the array supplied to implode() can contain objects, provided the objects implement the __toString() method.
$array = [
new Foo ( ‘foo’ ),
new Foo ( ‘bar’ ),
new Foo ( ‘qux’ )
];
TRUE became «1», FALSE became nothing.
Also quite handy in INSERT statements:
// build query.
$sql = «INSERT INTO table» ;
Even handier if you use the following:
This threw me for a little while.
If you want to implode an array as key-value pairs, this method comes in handy.
The third parameter is the symbol to be used between key and value.
// output: x is 5, y is 7, z is 99, hello is World, 7 is Foo
null values are imploded too. You can use array_filter() to sort out null values.
Sometimes it’s necessary to add a string not just between the items, but before or after too, and proper handling of zero items is also needed.
In this case, simply prepending/appending the separator next to implode() is not enough, so I made this little helper function.
If you want to use a key inside array:
Example:
$arr=array(
array(«id» => 1,»name» => «Test1»),
array(«id» => 2,»name» => «Test2»),
);
echo implode_key(«,»,$arr, «name»);
OUTPUT: Test1, Test2
It is possible for an array to have numeric values, as well as string values. Implode will convert all numeric array elements to strings.
Преобразование массива в строку php
Casting objects to arrays is a pain. Example:
$test = new MyClass ();
echo ‘
/*
Array
(
[MyClasspriv] => priv_value
[*prot] => prot_value
[pub] => pub_value
[MyClasspriv] => second_pub_value
)
*/
?>
Yes, that looks like an array with two keys with the same name and it looks like the protected field was prepended with an asterisk. But that’s not true:
/*
MyClasspriv (13) => priv_value
0 77 121 67 108 97 115 115 0 112 114 105 118
*prot (7) => prot_value
0 42 0 112 114 111 116
pub (3) => pub_value
112 117 98
MyClasspriv (11) => second_pub_value
77 121 67 108 97 115 115 112 114 105 118
*/
?>
The char codes show that the protected keys are prepended with ‘\0*\0’ and private keys are prepended with ‘\0’.__CLASS__.’\0′ so be careful when playing around with this.
The object casting methods presented here do not take into account the class hierarchy of the class you’re trying to cast your object into.
Value of uninitialized variable of different data types.
settype($a,’bool’);
var_dump($a); //boolean false
settype($b,’string’);
var_dump($b); //string » (length=0)
settype($c,’array’);
var_dump($c); //array (size=0) empty
settype($d,’int’);
var_dump($d); //int 0
settype($e,’float’);
var_dump($e); //float 0
You REALLY must be aware what you are doing, when you cast a lot in your code. For example, you can accidentaly change FALSE to TRUE (probably not in one line, like here):
if(TRUE === (boolean) (array) (int) FALSE) <
kaboom();
>
namaroulis stated «I found it tricky to check if a posted value was an integer»; to test if a variable is a number or a numeric string (such as form input, which is always a string), you must use is_numeric():
in response to bhsmither at gmail.com
It raises a warning because of the bad enquoted variable
It seems (unset) is pretty useless. But for people who like to make their code really compact (and probably unreadable). You can use it to use an variable and unset it on the same line:
?>
With the unset cast:
?>
Hoorah, we lost another line!
Checking for strings to be integers?
How about if a string is a float?
/* When checking for floats, we assume the possibility of no decimals needed. If you MUST require decimals (forcing the user to type 7.0 for example) replace the sequence:
4+(\.6+)?
with
6+\.7+
*/
Website-create.ru
В прошлый раз мы говорили о том, как преобразовать переменные в массив, а также массив в переменные. Сегодня подробно рассмотрим, как преобразовать массив в строку, а также, как потом восстановить массив из строки… и не только. В этой статье также посмотрим различные функции для вывода структуры массива.
Функции, которые мы здесь сегодня рассмотрим будут полезны, как для определенных конкретных задач, так и для отладки программ. Уверена, что они Вам пригодятся. Так что давайте без долгих вступлений приступим к делу!
Преобразовываем массив в строку
Сейчас я покажу Вам две функции, при помощи которых мы можем преобразовать массив в строку.
Первая функция называется implode().
В качестве параметров для этой функции передаются: символ-разделитель, который будет отделять элементы друг от друга (например, тире) и массив, который нужно преобразовать в строку.
Результат работы функции можно занести в переменную, которую в дальнейшем можно вывести на экран, чтобы увидеть результат.
Давайте посмотрим все это на примере.
Как видите, у нас есть простой массив, который мы хотим преобразовать в строку. В качестве разделителя используется «-» (тире). После преобразований мы выводим полученную строку на экран.
А вот то, что мы увидим на экране.
Кстати, если вместо массива-списка у нас был бы ассоциативный массив с ключами, то результат мы получили бы тот же самый. Ключи будут проигнорированы и в переменную попадут только значения элементов массива, разделенные заданным знаком-разделителем.
Можете самостоятельно провести такой эксперимент и создать вместо массива-списка ассоциативный массив, а потом посмотреть результат.
Абсолютно то же самое делает и функция join().
Весь код будет идентичен за исключением имени самой функции. И результат, как Вы понимаете, будет в точности таким же.
Преобразовываем массив в строку специального формата
Следующая функция также преобразует массив в строку, но эта строка будет несколько иного формата.
Что это значит? Это значит, что помимо значений элементов массива в строке, мы получим и еще кое-какую информацию. Мы увидим сколько элементов в массиве, индекс каждого элемента и число символов в нем.
Данная функция называется serialize(). В качестве параметра в скобках передается имя массива.
Давайте посмотрим ее работу на примере.
Как Вы можете видеть, формат здесь уже другой. Здесь первое, что мы видим – это число элементов массива, далее в фигурных скобках идут номер индекса элемента, число символов и само значение элемента – и так для каждого элемента массива.
Если массив будет ассоциативным, то, как результат, мы увидим: сначала число элементов в массиве, далее в фигурных скобках число символов ключа, сам ключ, число символов значения элемента, само значение элемента. И так для всех элементов массива.
Посмотрите на примере.
А вот и результат работы функции с ассоциативным массивом.
Для восстановления массива из строки, преобразованной при помощи функции serialize() мы можем использовать функцию unserialize().
Для этого нам нужно будет создать переменную, в которую мы и поместим результат выполнения данной функции. Результатом, как Вы понимаете, будет массив.
В качестве параметра в скобках, нужно будет передать имя переменной, в которой лежит наша строка.
Далее мы можем распечатать массив, чтобы убедиться, что функция отработала корректно.
Давайте сделаем это из нашего последнего примера.
В итоге обратно получаем наш массив.
Выводим структуру массива
Ну и на последок рассмотрим пару функций для вывода структуры массива. Такие функции очень полезны при отладке и тестировании программ.
Первая функция скорее всего Вам знакома из прошлых уроков. Мы очень часто ее использовали, как раз для того, чтобы увидеть структуру массива.
Это функция print_r(). В скобка передается имя массива, структуру которого мы хотим вывести.
Думаю, здесь все понятно. Мы получаем структуру массива.
А вот следующая функция var_dump() способна дать нам гораздо больше информации. А именно, мы можем увидеть не только ключ и значение элемента в массиве, а также: количество элементов массива, тип каждого элемента и число символов, которое он содержит (если элемент строчный).
Я специально добавила в наш массив один целочисленный элемент и один элемент, который содержит булево значение, чтобы Вы могли оценить результаты работы функции в полной мере.
Как видите, она дает достаточно подробную информацию о нашем массиве и о его элементах, так что при отладке и тестировании не забудьте про эту функцию.
Ну вот, наверное, на сегодня и все.
Буду надеяться, что знакомства с данными функциями поможет Вам при написании кода php и работе с массивами.
Добавляйте страничку в «Избранное», чтобы информация всегда была «под рукой».
Делитесь статьей с друзьями при помощи кнопок соц. сетей, которые расположены чуть ниже, а также не забывайте подписаться на обновления блога. Впереди еще много всего интересного!
С Вами была Анна Котельникова! Жду Ваших комментариев.
Массив в строку в PHP?
Я хочу сохранить его как одну строку в моей базе данных с каждой записью, разделенных | :
11 ответов
потом просто использовать json_decode () для декодирования строки из вашей БД. все остальное бесполезно, JSON сохраняет отношение массива нетронутым для последующего использования!
нет, вы не хотите хранить его как одну строку в своей базе данных.
можно использовать serialize() но это сделает ваши данные труднее искать, труднее работать с ними и тратить пространство.
вы также можете сделать другую кодировку, но она обычно склонна к той же проблеме.
вся причина, по которой у вас есть DB, заключается в том, что вы можете выполнять такую работу тривиально. Вам не нужна таблица для хранения массивов, вам нужна таблица, которую вы можете представлять в виде массива.
вы просто выберите данные из таблицы с SQL, а не иметь таблицу, которая выглядит как:
это не то, как кто-то разрабатывает схему в реляционной базе данных, это полностью разрушает ее цель.
один из лучших способов:
почему JSON: вы можете использовать его с большинством языков программирования, строка, созданная функцией serialize () php, читается только в PHP, и вам не понравится хранить такие вещи в своих базах данных, особенно если база данных разделяется между приложениями, написанными на разных языках программирования
однако, инкогнито прав, вы, вероятно, не хотите хранить его таким образом-это полная трата реляционной мощности вашей базы данных.
Если вы не настроены на сериализацию, вы также можете использовать json_encode ()