数组到字符串PHP?

数组到字符串PHP?,php,arrays,string,Php,Arrays,String,将PHP数组转换为字符串的最佳方法是什么? 我有一个变量$type,它是一个类型数组 $type = $_POST[type]; 我想将其作为单个字符串存储在数据库中,每个条目之间用分隔: 体育|节日|其他 使用 不,您不希望像那样将其作为单个字符串存储在数据库中 您可以使用serialize(),但这会使您的数据更难搜索,更难处理,并浪费空间 你也可以做一些其他的编码,但它通常也容易出现同样的问题 拥有DB的全部原因是,您可以轻松完成这样的工作。您不需要一个表来存储数组,您需要一个可以表示为

将PHP数组转换为字符串的最佳方法是什么?
我有一个变量
$type
,它是一个类型数组

$type = $_POST[type];
我想将其作为单个字符串存储在数据库中,每个条目之间用
分隔:

体育|节日|其他

使用


不,您不希望像那样将其作为单个字符串存储在数据库中

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

你也可以做一些其他的编码,但它通常也容易出现同样的问题

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

<?php
    $arr = array('Hello','World!','Beautiful','Day!');
    echo implode(" ",$arr);
?>
例如:

id | word
1  | Sports
2  | Festivals
3  | Classes
4  | Other
您只需使用SQL从表中选择数据,而不是使用如下表:

id | word
1  | Sports|Festivals|Classes|Other
这不是任何人在关系数据库中设计模式的方式,它完全违背了它的目的。

:

您可以使用


稍后只需使用从数据库中解码字符串。 其他任何东西都是无用的,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);

这一个保存键和值

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

希望它能帮助别人。

对于存储关联数组,您可以使用
序列化

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

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

print_r($arr);
$array = array('text' => 'Hello world', 'value' => 100);
$string = serialize($array); // a:2:{s:4:"text";s:11:"Hello world";s:5:"value";i:100;}
并使用
取消序列化加载

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

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

print_r($arr);
$array = array('text' => 'Hello world', 'value' => 100);
$string = serialize($array); // a:2:{s:4:"text";s:11:"Hello world";s:5:"value";i:100;}
但是如果需要使用数组创建dinamic
.php
文件(例如配置文件),可以使用
var\u导出(…,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 = 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字符串函数
infrade()


比如说,,
$sports='football'
$festival='janmastami'
$food='biriyani'

那么输出将是:

football|janmastami|biriyani

有关PHP内爆()函数的更多详细信息,请参阅

现在您可以将这个$string\u数组值插入数据库函数从数组元素返回一个字符串

<?php
    $arr = array('Hello','World!','Beautiful','Day!');
    echo implode(" ",$arr);
?>

输出:你好,世界!天气真好

<?php
    $arr = array('Hello','World!','Beautiful','Day!');
    echo implode("|",$arr);
?>


输出:你好|世界|天气真好

另一种方式是,PHP
var_export()
使用短数组语法(方括号)缩进4个空格:

函数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\u replace([“/\s*array\s\($/”,“/\)(,)?$/”,“/\s=>\s$/”],[null',]$1','=>['],$array);
$export=join(PHP_EOL,array_filter([“[”]+$array));
if((bool)$return)return$export;else echo$export;
}

拍摄。

您可以使用
序列化

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

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

print_r($arr);
$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


请避免将序列化值插入数据库。原因如下:@NullUserExceptionఠ_ఠ 我同意在DB中插入序列化值绝对会让人眼花缭乱,但你不知道他的情况——这很可能是有道理的。我认为这个问题应该重新讨论。对于初学者来说,这是一个有用的问题,我不认为这是一个离题的问题。如果数组中的某些值有字符,那么你可以转义这些字符。R在这里读。当然,你不必逃避定界符!@MarcB它使编码无误,标准,易于减少错误,并且易于导出回数组。他应该使用另一个表吗?可能。这比每个人都说的“内爆”好吗?当然。这个问题的正确答案是:不要插入序列化值在RDBMS中。这是应该做的事情。@timdev:json转义在某些情况下可能与SQL转义相对应,但取决于这一点,它最终会烧死你。json使用反斜杠-如果你所在的数据库不识别反斜杠,并且使用双引号转义,会怎么样?例如,
'
而不是
\
我同意这里表达的原则(正常形式是好的,使用DB构造是好的,duh),任何以“不,你不想要…”开头的答案在我的脑海中引起了轰动。你没有询问者问题的完整背景,信不信由你,他们可能只是有一个很好的理由去规范化这些特定的数据并将其存储在一个字段中。不,你不是无所不知的;你不知道询问者想要什么。请将你的意见放在评论中,而不是答案中。“其他任何东西都是无用的”…除了可能规范化数据。Rofl@comment在我上面。正如你所说,笼统的陈述几乎总是没有帮助的。我很高兴你们被款待:)“笼统的概括,以及绝对,总是错的。总是。“;)我喜欢这一个保留键。这对以后的使用非常有用。请详细说明您的答案,说明它如何解决您也可以使用的问题:“print_r($array,false);”,因为这将打印数组而不返回值。如果给定true,则print_r()不会自己打印,只会返回字符串。更多信息:这应该是最好的一个,因为
json_decode
会弄乱格式,导致混乱。它被要求将字符串存储在数据库中,而不是在我使用时打印itJFI。我必须调用$data=json_decode($jsonString,true)第二个参数是可选的,在大多数情况下,它不需要这个参数就可以工作