364 votes

Array to String PHP ?

Quelle est la meilleure méthode pour convertir un tableau PHP en chaîne de caractères ?
J'ai la variable $type qui est un tableau de types.

$type = $_POST[type];

Je veux le stocker comme une seule chaîne dans ma base de données avec chaque entrée séparée par | :

Sports|Festivals|Autres

25 votes

Veuillez vous abstenir d'insérer des valeurs sérialisées dans une base de données. Voici pourquoi : stackoverflow.com/questions/7364803/

14 votes

@NullUserException_ Je suis d'accord pour dire que l'insertion de valeurs sérialisées dans la base de données brûle les yeux, mais vous ne connaissez pas sa situation - cela peut très bien être justifié.

4 votes

Je pense que cette question devrait être rouverte. C'est une question utile pour les débutants et je ne pense pas qu'elle soit hors sujet.

441voto

Niet the Dark Absol Points 154811

Utilisez imploser

implode("|",$type);

18 votes

C'est bien, sauf si vous avez des tableaux imbriqués - ce qui peut arriver avec $_POST si vous utilisez des entrées de formulaire portant un nom de tableau.

0 votes

Avec des tableaux imbriqués, utilisez simplement un foreach, cela fonctionnera.

0 votes

@devasia2112 foreach pour un tableau imbriqué ne sera pas une solution bonne/efficace.... s'il s'agit d'un tableau imbriqué à plusieurs niveaux ? et si quelque part la profondeur est 2 et quelque part 3 ? ce sera trop de surcharge et la complexité du programme sera pire dans ce cas ! La sérialisation est de loin la meilleure solution dans ce cas.

278voto

Jakub Points 12663

Vous pouvez utiliser json_encode()

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

echo json_encode($arr);
?>

Plus tard, utilisez simplement json_decode() pour décoder la chaîne de caractères de votre BD. Tout le reste est inutile, JSON conserve la relation du tableau intacte pour une utilisation ultérieure !

51 votes

" Tout le reste est inutile. "... sauf peut-être en normalisant les données.

7 votes

Rofl @ commentaire au-dessus de moi. Comme vous le dites, les déclarations générales sont presque toujours inutiles.

14 votes

Je suis content que cela vous amuse :)

56voto

sumit Points 520
json_encode($data) //converts an array to JSON string
json_decode($jsonString) //converts json string to php array

POURQUOI JSON : Vous pouvez l'utiliser avec la plupart des langages de programmation, la chaîne créée par la fonction serialize() de php n'est lisible qu'en PHP, et vous n'aimerez pas stocker de telles choses dans vos bases de données, surtout si la base de données est partagée entre des applications écrites dans différents langages de programmation

1 votes

JFI dans mon utilisation j'ai dû appeler $data= json_decode($jsonString, true)

0 votes

Le deuxième argument est facultatif, dans la plupart des cas, il fonctionne sans cela.

1 votes

Cela fonctionne parfaitement pour les tableaux à une ou plusieurs dimensions et, à mon avis, cela devrait être la réponse acceptée. Pensez également à ajouter true comme second paramètre.

38voto

Incognito Points 10637

Non, vous ne voulez pas le stocker comme une seule chaîne dans votre base de données comme ça.

Vous pourriez utiliser serialize() mais cela rendra vos données plus difficiles à rechercher, plus difficiles à travailler et vous fera perdre de l'espace.

Vous pouvez également utiliser un autre codage, mais il est généralement sujet au même problème.

La raison pour laquelle vous avez une base de données est que vous pouvez accomplir ce travail de manière triviale. Vous n'avez pas besoin d'une table pour stocker des tableaux, vous avez besoin d'une table que vous pouvez représenter comme un tableau.

Exemple :

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

Il suffirait de sélectionner les données de la table avec SQL, plutôt que d'avoir une table qui ressemble à ceci :

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

Ce n'est pas ainsi que l'on conçoit un schéma dans une base de données relationnelle, cela va totalement à l'encontre de son objectif.

0 votes

Le stockage d'un tableau sérialisé n'est pas meilleur que le stockage d'une | -tableau délimité.

2 votes

Bien sûr, vous n'avez pas besoin d'échapper les délimiteurs !

2 votes

@MarcB Cela rend l'encodage infaillible, standard, sujet à moins de bogues, et facilement exportable vers un tableau. Devrait-il utiliser un autre tableau ? Probablement. Est-ce mieux que tout le monde disant implode ? Absolument.

14voto

timdev Points 25910

implode() :

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

Cependant, Incognito a raison, vous ne voulez probablement pas le stocker de cette façon - c'est un gaspillage total de la puissance relationnelle de votre base de données.

Si vous tenez absolument à la sérialisation, vous pouvez également envisager d'utiliser la fonction json_encode()

0 votes

Implode est limité aux réseaux plats

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X