序列化添加意外数据

pan*_*hro 3 php

$post = &$_POST;
$arr = $post['articles'];
var_dump($arr);
//array (size=3)  0 => string '145' (length=3)  1 => string '123' (length=3)  2 => string '128' (length=3)

$sArr = serialize($arr);
var_dump($sArr);
//string 'a:3:{i:0;s:3:"145";i:1;s:3:"123";i:2;s:3:"128";}' (length=48)

die();
Run Code Online (Sandbox Code Playgroud)

我有一个数组,我希望序列化存储在我的数据库中.

但是输出并不像预期的那样,我需要一个字符串:

{145, 123, 128} 
Run Code Online (Sandbox Code Playgroud)

但是添加了一些其他数据 - 为什么以及如何删除它?

str*_*rry 9

原因可以在PHP文档中找到.它说

用于存储或传递PHP值而不会丢失其 类型和结构

所以serialize函数也必须编码值类型等.我猜这i是索引,并且s是类型"字符串".

要获得结果,请implode改用.


mor*_*ebi 7

你可以使用json_encode任何复杂的数据,它是标准的.

<?php
$arr=[145, 123, 128];//considering your input is like this
echo json_encode($arr);
?>
Run Code Online (Sandbox Code Playgroud)

这个将完全回答

[145, 123, 128]
Run Code Online (Sandbox Code Playgroud)

如果你需要花括号那么多,你可以使用它

echo '{'.substr(json_encode($arr),1,-1).'}';
Run Code Online (Sandbox Code Playgroud)

  • 对于你的第二点,这不是如何做到的.请改用`JSON_FORCE_OBJECT`选项.否则,这是正确的答案. (4认同)
  • 到@ miken32:但是`SON_FORCE_OBJECT`也应该包含json的索引.喜欢:{"0":145,"1":123,"2":128} (2认同)