我需要在平面文件中存储多维关联数据数组以用于缓存目的.我偶尔会遇到将其转换为JSON以便在我的Web应用程序中使用的需要,但绝大多数时候我将直接在PHP中使用该数组.
将数组作为JSON或PHP序列化数组存储在此文本文件中会更有效吗?我环顾四周,似乎在最新版本的PHP(5.3)中,json_decode实际上比它更快unserialize.
我目前倾向于将数组存储为JSON,因为我觉得如果有必要,人们可以更容易地阅读它,它可以在PHP和JavaScript中轻松使用,而且从我读过的,它甚至可能是更快解码(不确定编码).
有谁知道任何陷阱?任何人都有良好的基准来展示这两种方法的性能优势?
我刚刚了解了这些serialize()和unserialize()功能.这有什么用途?我知道人们将事物序列化到数据库中.你能给我一些有用的示例用法吗?
我也看到了javascript中的序列化代码,这是一样的吗?javascript中的序列化字符串可以用php反序列化unserialize()吗?
我正在尝试将一些PHP 5.3代码转换为PHP 5.2(不支持匿名函数).这是PHP 5.3代码:
$nr = 2;
$a = array(1,2,3,4,5,6,7,8,9,10);
$a = array_filter($a,function($e) use($nr) {
return $e % $nr == 0;
});
Run Code Online (Sandbox Code Playgroud)
我的转换是这样的:
array_filter($a,create_function('$e','return $e % $nr == 0;'));
Run Code Online (Sandbox Code Playgroud)
应该use($nr)放在哪里?
我试图将序列化的数组保存到我的mysql数据库然后检索它们并取消它们但是我无法解决它们如何反序列化它们.这是我到目前为止:
$query = mysql_query("SELECT friends FROM users WHERE id='$myid'");
$friends = mysql_fetch_array($query);
unserialize($friends);
Run Code Online (Sandbox Code Playgroud)
被困在这里?????
array_push($friends, $id);
$friendsUpdated = serialize($friends);
mysql_query("UPDATE users SET friends='$friendsUpdated' WHERE id='$myid'");
Run Code Online (Sandbox Code Playgroud) 如何通过使用php将所有字符串括在一对双引号中,我想在下面的字符串中获取它们,
$str = 'a:2:{i:1;a:4:{i:1;s:4:"2000";i:2;s:8:"10th STD";i:3;s:9:"Full Time";i:4;s:24:"State Board of Education";}i:2;a:4:{i:1;s:4:"2003";i:2;s:8:"12th STD";i:3;s:9:"Full Time";i:4;s:24:"State Board of Education";}}';
Run Code Online (Sandbox Code Playgroud)
我想要输出如下
2000
10th STD
Full Time
State Board of Education
Run Code Online (Sandbox Code Playgroud)
我尝试了以下代码,但仅输出 2000
<?php
$str = 'a:2:{i:1;a:4:{i:1;s:4:"2000";i:2;s:8:"10th STD";i:3;s:9:"Full Time";i:4;s:24:"State Board of Education";}i:2;a:4:{i:1;s:4:"2003";i:2;s:8:"12th STD";i:3;s:9:"Full Time";i:4;s:24:"State Board of Education";}}'
if (preg_match('/"([^"]+)"/', $str, $m))
{
print $m[1];
}
else
{
}
<?
Run Code Online (Sandbox Code Playgroud)
请建议我怎么做,我应该用哪个功能来获取输出?