Quelle est la meilleure méthode pour convertir un tableau PHP en chaîne?
J'ai la variable $type
qui est un tableau de types.
$type = $_POST[type];
Je veux le stocker en tant que chaîne unique dans ma base de données, chaque entrée étant séparée par |
:
Sports | Festivals | Autres
Il suffit d'utiliser imploser
implode("|",$type);
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 votre base de données. Tout le reste est inutile, JSON garde la relation de tableau intacte pour une utilisation ultérieure!
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 est lisible uniquement en PHP, et vous n'aimerez pas stocker de telles choses dans vos bases de données spécialement si database est partagé entre des applications écrites dans différents langages de programmation
Non, vous ne voulez pas le stocker comme une seule chaîne dans votre base de données.
Vous pouvez utiliser serialize()
, mais cela rendra vos données plus difficiles à rechercher, à utiliser et à utiliser de l’espace.
Vous pouvez également faire un autre encodage, 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 un travail comme celui-ci 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 sous forme de tableau.
Exemple:
id | Word
1 | Sports
2 | Festivals
3 | Classes
4 | Other
Vous sélectionneriez simplement les données de la table avec SQL, plutôt que d'avoir une table qui ressemble à:
id | Word
1 | Sports|Festivals|Classes|Other
Ce n'est pas ainsi que quiconque conçoit un schéma dans une base de données relationnelle, il en va totalement à l'encontre du but recherché.
Un des meilleurs moyens:
echo print_r($array, true);
<?php
$string = implode('|',$types);
Cependant, Incognito a raison, vous ne souhaiterez 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 ne voulez pas sérialiser, vous pouvez également envisager d'utiliser json_encode ()
Celui-ci sauve des clés et des valeurs
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;
}
J'espère que ça aide quelqu'un.
$data = array("asdcasdc","35353","asdca353sdc","sadcasdc","sadcasdc","asdcsdcsad");
$string_array = json_encode($data);
maintenant vous pouvez insérer cette valeur $ string_array dans la base de données
Pour les tableaux associatifs de magasin, vous pouvez utiliser serialize
:
$arr = array(
'a' => 1,
'b' => 2,
'c' => 3
);
file_put_contents('stored-array.txt', serialize($arr));
Et chargez avec unserialize
:
$arr = unserialize(file_get_contents('stored-array.txt'));
print_r($arr);
Mais si vous avez besoin de créer des fichiers dinamic .php
avec un tableau (par exemple, des fichiers de configuration), vous pouvez utiliser var_export(..., true);
, comme ceci:
Enregistrer dans le fichier:
$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);
Obtenir des valeurs de tableau:
$arr = include 'config.php';
print_r($arr);
Vous pouvez utiliser la fonction PHP _ implode()
Comme,
<?php
$sports=$_POST['sports'];;
$festival=$_POST['festival'];
$food=$_POST['food'];
$array=[$sports,$festival,$food];
$string=implode('|',$array);
echo $string;
?>
Si, par exemple, $sports='football';
$festival='janmastami';
$food='biriyani';
Alors la sortie serait:
football|janmastami|biriyani
Pour plus de détails sur la fonction PHP implode (), reportez-vous à w3schools