数组到字符串PHP?

Phi*_*ide 258 php arrays string

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

$type = $_POST[type];
Run Code Online (Sandbox Code Playgroud)

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

体育|节日|其他

Nie*_*sol 317

只需使用内

implode("|",$type);
Run Code Online (Sandbox Code Playgroud)

  • 这是好的,除非你有嵌套数组 - 如果你使用数组命名的表单输入,这可能发生在`$ _POST`. (12认同)

Jak*_*kub 211

你可以使用json_encode()

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

echo json_encode($arr);
?>
Run Code Online (Sandbox Code Playgroud)

稍后只需使用json_decode()解码数据库中的字符串. 其他任何东西都没用,JSON保持数组关系完好无损,以备日后使用!

  • "**其他任何东西都是无用的**"......除了可能正常化数据. (38认同)
  • "彻底的概括,以及绝对,总是错误的.总是." ;) (14认同)
  • 我很高兴你们玩得很开心:) (10认同)
  • Rofl @评论在我之上.如你所说,一揽子陈述几乎总是无益的. (5认同)

sum*_*mit 42

json_encode($data) //converts an array to JSON string
json_decode($jsonString) //converts json string to php array
Run Code Online (Sandbox Code Playgroud)

为什么JSON:您可以将它与大多数编程语言一起使用,由php的serialize()函数创建的字符串仅在PHP中可读,如果数据库在用于编写的应用程序之间共享,您将不希望将这些内容存储在您的数据库中.不同的编程语言


Inc*_*ito 36

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

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

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

你有一个数据库的全部原因是你可以完成这样的工作.您不需要表来存储数组,您需要一个可以表示为数组的表.

例:

id | word
1  | Sports
2  | Festivals
3  | Classes
4  | Other
Run Code Online (Sandbox Code Playgroud)

您只需使用SQL从表中选择数据,而不是具有如下所示的表:

id | word
1  | Sports|Festivals|Classes|Other
Run Code Online (Sandbox Code Playgroud)

这不是任何人在关系数据库中设计模式的方式,它完全违背了它的目的.

  • 这个问题的正确答案是:不要在RDBMS中插入序列化值.这应该是[召唤猛禽](http://xkcd.com/292/). (5认同)
  • 确定它是,你不必逃避分隔符! (2认同)
  • @MarcB它使编码具有防篡改,标准,容易出错,并可轻松导出回阵列.他应该使用另一张桌子吗?大概.这比每个人说内爆都好吗?绝对. (2认同)
  • 虽然我同意这里表达的原则(正常形式很好,使用数据库来构建很好,废话),但任何以“不,你不想......”开头的*答案*都会在我的脑海中敲响警钟。您没有询问者问题的完整上下文,无论您相信与否,他们可能只是有一个“极好的”理由来非规范化此特定数据并将其存储在单个字段中。不,你不是无所不知的;你不知道提问者想要什么。请把您的意见放在*评论*中,而不是*答案*中。 (2认同)

vvk*_*wss 33

最好的方式之一:

echo print_r($array, true);
Run Code Online (Sandbox Code Playgroud)

  • 请详细说明你的答案,展示它如何解决问题 (10认同)

tim*_*dev 12

implode():

<?php
$string = implode('|',$types);
Run Code Online (Sandbox Code Playgroud)

但是,Incognito是对的,您可能不希望以这种方式存储它 - 这完全浪费了数据库的关系能力.

如果你在序列化时死定,你也可以考虑使用json_encode()


Ant*_*vic 11

这个节省了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;
}
Run Code Online (Sandbox Code Playgroud)

希望它可以帮助某人.


Gui*_*nto 5

对于商店关联数组,可以使用serialize

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

file_put_contents('stored-array.txt', serialize($arr));
Run Code Online (Sandbox Code Playgroud)

并使用加载unserialize

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

print_r($arr);
Run Code Online (Sandbox Code Playgroud)

但是,如果需要创建.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);
Run Code Online (Sandbox Code Playgroud)

获取数组值:

$arr = include 'config.php';

print_r($arr);
Run Code Online (Sandbox Code Playgroud)


Dau*_*lik 5

有很多方法,

两个最好的方法是

$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
Run Code Online (Sandbox Code Playgroud)

  • @Tschallacka是的,但是这篇文章中很少有答案提供输出...... (2认同)

Akb*_*oft 5

$data = array("asdcasdc","35353","asdca353sdc","sadcasdc","sadcasdc","asdcsdcsad");

$string_array = json_encode($data);
Run Code Online (Sandbox Code Playgroud)

现在您可以将此$ string_array值插入数据库


小智 5

您可以使用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;}
Run Code Online (Sandbox Code Playgroud)

并用于unserialize将字符串转换为数组:

$string = 'a:2:{s:4:"text";s:11:"Hello world";s:5:"value";i:100;}';
$array = unserialize($string); // 'text' => 'Hello world', 'value' => 100
Run Code Online (Sandbox Code Playgroud)