将 PHP 数组转换为字符串的最佳方法是什么?
我有变量 $type
,它是一个类型数组。
$type = $_POST[type];
我想将它作为单个字符串存储在我的数据库中,每个条目由 |
分隔:
Sports|Festivals|Other
您可以使用 json_encode()
<?php
$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
echo json_encode($arr);
?>
稍后只需使用 json_decode() 从您的数据库中解码字符串。 其他什么都没用,JSON 保持数组关系不变以备后用!
json_encode($data) //converts an array to JSON string
json_decode($jsonString) //converts json string to php array
为什么 JSON :您可以将它与大多数编程语言一起使用,由 php 的 serialize() 函数创建的字符串只能在 PHP 中读取,如果数据库在编写的应用程序之间共享,您将不喜欢将这些东西存储在数据库中不同的编程语言
最好的方法之一:
echo print_r($array, true);
json_decode
与格式混淆导致混乱。
不,您不想像这样将它作为单个字符串存储在数据库中。
您可以使用 serialize()
,但这会使您的数据更难搜索、更难使用并浪费空间。
你也可以做一些其他的编码,但它通常容易出现同样的问题。
您拥有数据库的全部原因是您可以轻松完成这样的工作。您不需要一个表来存储数组,您需要一个可以表示为数组的表。
例子:
id | word
1 | Sports
2 | Festivals
3 | Classes
4 | Other
您只需使用 SQL 从表中选择数据,而不是使用如下所示的表:
id | word
1 | Sports|Festivals|Classes|Other
这不是任何人在关系数据库中设计模式的方式,它完全违背了它的目的。
''
而不是 \'
?
<?php
$string = implode('|',$types);
但是,Incognito 是对的,您可能不想以这种方式存储它——这完全是在浪费数据库的关系能力。
如果您对序列化一无所知,您还可以考虑使用 json_encode()
这个可以保存 KEYS & VALUES
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;
}
希望它可以帮助某人。
$data = array("asdcasdc","35353","asdca353sdc","sadcasdc","sadcasdc","asdcsdcsad");
$string_array = json_encode($data);
现在您可以将此 $string_array 值插入数据库
对于存储关联数组,您可以使用 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);
您可以使用 serialize
:
$array = array('text' => 'Hello world', 'value' => 100);
$string = serialize($array); // a:2:{s:4:"text";s:11:"Hello world";s:5:"value";i:100;}
并使用 unserialize
将字符串转换为数组:
$string = 'a:2:{s:4:"text";s:11:"Hello world";s:5:"value";i:100;}';
$array = unserialize($string); // 'text' => 'Hello world', 'value' => 100
有很多方法,
两种最好的方法是
$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
echo json_encode($arr);
//ouputs as
{"a":1,"b":2,"c":3,"d":4,"e":5}
$b = array ('m' => 'monkey', 'foo' => 'bar', 'x' => array ('x', 'y', 'z'));
$results = print_r($b, true); // $results now contains output from print_r
还有另一种方式,使用短数组语法(方括号)的 PHP var_export()
缩进了 4 个空格:
function varExport($expression, $return = true) {
$export = var_export($expression, true);
$export = preg_replace("/^([ ]*)(.*)/m", '$1$1$2', $export);
$array = preg_split("/\r\n|\n|\r/", $export);
$array = preg_replace(["/\s*array\s\($/", "/\)(,)?$/", "/\s=>\s$/"], [null, ']$1', ' => ['], $array);
$export = join(PHP_EOL, array_filter(["["] + $array));
if ((bool) $return) return $export; else echo $export;
}
拍摄 here。
\R
在正则表达式中的作用。
如果您有一个数组(如 $_POST)并且需要保留键和值:
function array_to_string($array) {
foreach ($array as $a=>$b) $c[]=$a.'='.$b;
return implode(', ',$c);
}
结果如:“name=Paul,age=23,city=Chicago”
$types = ['a','b','c'];
$string = implode(",",$types);
echo $string;
答案 = “a,b,c”。
$_POST
可能会发生这种情况。