我的问题非常基本.
我没有找到任何例子来满足我的需求,究竟serialize()和unserialize()在PHP是什么意思?他们只举一个例子 - 序列化一个数组并以一种原因不明的格式显示输出.通过他们的术语很难理解基本概念.
编辑:
<?php
$a= array( '1' => 'elem 1', '2'=> 'elem 2', '3'=>' elem 3');
print_r($a);
echo ("<br></br>");
$b=serialize($a);
print_r($b);
?>
Run Code Online (Sandbox Code Playgroud)
输出:
Array ( [1] => elem 1 [2] => elem 2 [3] => elem 3 )
a:3:{i:1;s:6:"elem 1";i:2;s:6:"elem 2";i:3;s:7:" elem 3";}
Run Code Online (Sandbox Code Playgroud)
我无法理解第二个输出.除此之外,任何人都可以举例说明我需要在使用之前序列化一个php数组吗?
生成多维数组的MD5(或任何其他哈希)的最佳方法是什么?
我可以轻松地编写一个循环,遍历数组的每个级别,将每个值连接成一个字符串,然后简单地在字符串上执行MD5.
然而,这看起来很麻烦,我想知道是否有一个时髦的函数,它将采用一个多维数组,并哈希它.
在MySQL数据库与序列化数组中存储JSON数据有哪些优缺点?
我只想快速存储一个从远程API获取的数组,这样我就可以在本地主机上乱搞它.
所以:
这里没有效率等需求,这对于实际网站来说只是为了获得一些消毒/格式化方法等
有没有像?store_array()或restore_arrray()!的功能!
所以我需要在PHP中对数组进行编码并将其以纯文本形式存储在MySQL数据库中,我的问题是我应该使用serialize()还是json_encode()?每个人的优点和缺点是什么?
我认为他们中的任何一个都会在这种情况下做.但是你更喜欢哪一个?为什么?如果它不是数组的东西?
我刚刚了解了这些serialize()和unserialize()功能.这有什么用途?我知道人们将事物序列化到数据库中.你能给我一些有用的示例用法吗?
我也看到了javascript中的序列化代码,这是一样的吗?javascript中的序列化字符串可以用php反序列化unserialize()吗?
我有一个PHP脚本,它在一个相当大的CSV文件(5MB +)上构建一个二叉搜索树.这很好,但是读取/解析/索引文件大约需要3秒钟.
现在我想我可以使用serialize()并unserialize()加快这个过程.当CSV文件在此期间没有改变时,再次解析它是没有意义的.
令我恐惧的是,我发现调用serialize()我的索引对象需要5秒钟并产生一个巨大的(19MB)文本文件,而unserialize()读取它需要27秒才能忍受.改进看起来有点不同.;-)
那么 - 是否有更快的机制来存储/恢复PHP中的大型对象图?
(澄清:我正在寻找的东西,需要显著比上述3秒少做反序列化的工作.)
我在我的表的一个字段中存储了一些"非结构化"数据(一个键控数组),我现在正在使用serialize()/ unserialize()从数组到字符串来回"转换".
但是,在反序列化数据时,我偶尔会遇到错误.我相信这些错误的发生是因为我正在序列化的数组中的字符串中的Unicode数据,尽管有一些Unicode数据的记录可以正常工作.(DB字段是UTF-8)
我想知道使用json_encode而不是序列化是否会产生影响/使其更具弹性.这对我来说测试并不简单,因为在我的开发环境中一切都运行良好,但在生产中,偶尔(大约1%的记录)我得到一个错误.
顺便说一句,我知道我正在寻找一个解决这个问题的实际解释而只是盲目地尝试一些东西,我有点希望我可以在不花太多时间的情况下摆脱它.
你认为使用json_encode而不是serialize会使这对"序列化错误"更具弹性吗?数据格式看起来对我来说更"宽容"......
更新:我得到的实际错误是:
Notice: unserialize(): Error at offset 401 of 569 bytes in C:\blah.php on line 20
Run Code Online (Sandbox Code Playgroud)
谢谢!丹尼尔
我想避免写入DB并使用常量/数组来处理lang文件等.
即:
$lang = array (
'hello' => 'hello world!'
);
Run Code Online (Sandbox Code Playgroud)
并能够从后台编辑它.(然后我不会从穷人的数据库中取出它,而是使用$ lang ['hello'] ..).
您有什么建议以最好和最有效的方式拉动它?
因此,在过去的几天里,我一直在试图让一个班级正确克隆.问题是克隆不会删除/重做任何pass-by-reference.结果是,主数据对象仍然作为引用传递,从而完全否定了克隆的影响.
这是问题的简化版本:
class my_class {
private $data;
public $var1;
public $var2;
public $var3;
public function __construct() {
$this->data = new stdClass;
$this->data->var1 = 'a';
$this->data->var2 = 'b';
$this->data->var3 = 'c';
$this->var1 = &$this->data->var1;
$this->var2 = &$this->data->var2;
$this->var3 = &$this->data->var3;
}
}
$original = new my_class;
$new = clone $original;
$new->var3 = 'd';
// Output Should Be "c", outputs "d"
echo $original->var3;
Run Code Online (Sandbox Code Playgroud)
请在此处查看:http://3v4l.org/nm6NW
我的问题:我怎样才能__clone()用来纠正"d"到"c"的输出?
请以任何方式帮助你!?
我最终使__clone()触发器出错并创建了一个名为make_clone()克隆标准化的函数.
__clone() 现在看起来像:
public function __clone() { …Run Code Online (Sandbox Code Playgroud)