Массив в строку PHP? - PullRequest
       8

Массив в строку PHP?

241 голосов
/ 20 сентября 2011

Каков наилучший метод для преобразования массива PHP в строку?
У меня есть переменная $type, которая является массивом типов.

$type = $_POST[type];

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

Спорт | Фестивали | Другое

Ответы [ 11 ]

297 голосов
/ 20 сентября 2011

Просто используйте взорваться

implode("|",$type);
199 голосов
/ 20 сентября 2011

Вы можете использовать json_encode ()

<?php
$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);

echo json_encode($arr);
?>

Позже просто используйте json_decode () для декодирования строки из вашей БД. Все остальное бесполезно, JSON сохраняет связь с массивом для дальнейшего использования!

36 голосов
/ 03 октября 2013
json_encode($data) //converts an array to JSON string
json_decode($jsonString) //converts json string to php array

ПОЧЕМУ JSON: Вы можете использовать его с большинством языков программирования, строка, созданная функцией serialize () php, доступна только для чтения в PHP, и вам не понравится хранить такие вещи в ваших базах данных, особенно если база данныхраспределяется между приложениями, написанными на разных языках программирования

35 голосов
/ 20 сентября 2011

Нет, вы не хотите хранить его как одну строку в вашей базе данных, подобную этой.

Вы можете использовать serialize(), но это сделает ваши данные труднее искать, с ними сложнее работать,и тратит впустую пространство.

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

Пример:

id | word
1  | Sports
2  | Festivals
3  | Classes
4  | Other

Вы просто выбрали бы данные из таблицы с помощьюSQL, а не иметь таблицу, которая выглядит следующим образом:

id | word
1  | Sports|Festivals|Classes|Other

Это не то, как кто-либо разрабатывает схему в реляционной базе данных, он полностью отрицает ее цель.

31 голосов
/ 18 июня 2014

Один из лучших способов:

echo print_r($array, true);
11 голосов
/ 20 сентября 2011

взрываться ()

<?php
$string = implode('|',$types);

Тем не менее, Incognito прав, вы, вероятно, не хотите хранить его таким образом - это пустая трата реляционных возможностей вашей базы данных.

Если вы не готовы к сериализации, вы также можете рассмотреть возможность использования json_encode ()

10 голосов
/ 27 октября 2014

Этот сохраняет КЛЮЧИ И ЗНАЧЕНИЯ

function array2string($data){
    $log_a = "";
    foreach ($data as $key => $value) {
        if(is_array($value))    $log_a .= "[".$key."] => (". array2string($value). ") \n";
        else                    $log_a .= "[".$key."] => ".$value."\n";
    }
    return $log_a;
}

Надеюсь, это кому-нибудь поможет.

4 голосов
/ 17 ноября 2017
$data = array("asdcasdc","35353","asdca353sdc","sadcasdc","sadcasdc","asdcsdcsad");

$string_array = json_encode($data);

теперь вы можете вставить это значение $ string_array в базу данных

4 голосов
/ 17 апреля 2017

Для хранения ассоциативных массивов вы можете использовать serialize:

$arr = array(
    'a' => 1,
    'b' => 2,
    'c' => 3
);

file_put_contents('stored-array.txt', serialize($arr));

И загрузить с помощью unserialize:

$arr = unserialize(file_get_contents('stored-array.txt'));

print_r($arr);

Но если вам нужно создать динамические .php файлы с массивом (например, файлы конфигурации), вы можете использовать var_export(..., true);, например:

Сохранить в файл:

$arr = array(
    'a' => 1,
    'b' => 2,
    'c' => 3
);

$str = preg_replace('#,(\s+|)\)#', '$1)', var_export($arr, true));
$str = '<?php' . PHP_EOL . 'return ' . $str . ';';

file_put_contents('config.php', $str);

Получить значения массива:

$arr = include 'config.php';

print_r($arr);
3 голосов
/ 02 июля 2017

Вы можете использовать строковую функцию PHP implode()

Например,

<?php
  $sports=$_POST['sports'];;
  $festival=$_POST['festival'];
  $food=$_POST['food'];
  $array=[$sports,$festival,$food];
  $string=implode('|',$array);
  echo $string;
?>

Если, например, $sports='football'; $festival='janmastami'; $food='biriyani';

Тогда вывод будет:

football|janmastami|biriyani

Подробнее о функции PHP implode () см. В w3schools

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...