将平面数组转换为要保存在数据库中的分隔字符串

将PHP数组转换为字符串的最佳方法是什么?< br / > 我有一个变量$type,它是一个类型数组
$type = $_POST[type];

我想把它作为一个字符串存储在我的数据库中,每个条目用|分隔:

Sports|Festivals|Other
939300 次浏览

使用内爆

implode("|",$type);

不,你不想把它作为一个字符串存储在数据库中。

你可以使用serialize(),但这将使你的数据更难搜索,更难处理,并浪费空间。

你也可以做一些其他的编码,但通常也会遇到同样的问题。

你有一个DB的全部原因是你可以完成这样琐碎的工作。你不需要一个表来存储数组,你需要一个可以表示为数组的表。

例子:

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 ()

你可以使用json_encode ()

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


echo json_encode($arr);
?>
稍后只需使用json_decode ()来解码来自DB的字符串。 其他任何东西都是无用的,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);

这个可以节省KEYS &值

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;
}

希望它能帮助到别人。

对于存储关联数组,可以使用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);

有很多方法,

最好的两种方法是

$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
$data = array("asdcasdc","35353","asdca353sdc","sadcasdc","sadcasdc","asdcsdcsad");


$string_array = json_encode($data);

现在您可以将这个$string_array值插入到数据库中

还有另一种方法,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;
}

在这里

你可以使用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

如果你有一个数组(比如$_POST),并且需要保存键和值:

function array_to_string($array) {
foreach ($array as $a=>$b) $c[]=$a.'='.$b;
return implode(', ',$c);
}

结果如下:“名字=保罗,年龄=23,城市=芝加哥”;