首页 > 其他分享 >将复杂数据类型封装在字符串中

将复杂数据类型封装在字符串中

时间:2024-12-30 23:42:58浏览次数:1  
标签:fp butter 封装 数据类型 pantry sugar 数组 字符串

希望得到一个数组或对象的字符串表示,以便存储在一个文件或数据库中。
使用serialize()将变量及其值编码为一种文本形式:

// 定义一个数组,其中包含食品名称作为键,食品数量作为值
$pantry = array('sugar' => '2 lbs.', 'butter' => '3 sticks');

// 尝试以写入模式('w')打开一个名为'tmp/pantry'的文件。如果文件不存在,它将被创建。
// 如果文件打开失败,使用or运算符触发die函数,输出错误信息并停止脚本执行
$fp = fopen('tmp/pantry','w') or die("Can't open pantry");

// 使用serialize函数将$pantry数组转换成一个可存储或传输的字符串表示。
// serialize函数将数组或其他复杂数据类型转换成一个单一的字符串。
// 然后,使用fputs函数将这个序列化后的字符串写入到之前打开的文件中。
// fputs函数需要两个参数:文件指针($fp)和要写入的数据(serialize($pantry))。
// 串行化字符串:a:2:{s:5:"sugar";s:6:"2 lbs.";s:6:"butter";s:8:"3 sticks";}
fputs($fp,serialize($pantry));

// 关闭文件指针。这是一个好习惯,可以释放系统资源。
// 一旦文件被关闭,对文件的进一步操作(如写入)将不再可能,直到文件被重新打开。
fclose($fp);

要重新创建变量,可以使用unserialize():
//$new_pantry将是数组array('sugar' => '2 lbs.', 'butter' => '3 sticks');
//unserialize()反序列化
$new_pantry = unserialize(file_get_contents('/tmp/pantry'));

//为了更容易地与其他语言互操作(稍有些性能开销),可以使用json_encode()串行化数据:
//JSON编码的字符串:{"sugar:"2 lbs.", "butter": "3 sticks"}
$pantry = array('sugar' => '2 lbs.', 'butter' => '3 sticks');
$fp = fopen('tmp/pantry','w') or die("Can't open pantry");
fputs($fp,json_encode($pantry));
fclose($fp);

可以使用json_decode()重新创建变量:
$new_pantry = json_decode(file_get_contents('/tmp/pantry.json'), TRUE);

JSON无法区分串行化格式的对象和关联数组,所以调用时必须选择想要对象还是关联数组。
如果第二个参数为true,如前例所示,就会生成关联数组。
如果没有这个参数,同样的JSON将解码为stdclass类的一个对象,包含两个属性:sugar和butter。
通过URL在页面之间传递串行化数据时,应当在数据上调用urlencode(),来确保对其中的URL元字符转义

标签:fp,butter,封装,数据类型,pantry,sugar,数组,字符串
From: https://www.cnblogs.com/xueshi/p/18642725

相关文章

  • Vue3 中数组和字符串的处理
    原因:想要在网页文本框中输入一个整型数组,用作Set去重测试。遇到问题:网页文本框中输入的一串内容是字符串格式的,暂且称之为“数组字符串”。解决方式:先把“数组字符串”转换成“字符串数组”格式,再转换为“整型数组”格式。定义变量首先定义一些用到的变量:数组字......
  • JAVA-Day 04:数据类型转换
    类型转换(Typeconversion)byte,short,char—>int—>long—>float—>doouble低---------------------------------------------------------------------->高注意:运算中,不同类型的数据先转化为同一类型,然后进行计算。类型转换(Typeconversion)分为强制转换和自动转换1.强制......
  • 【Web】0基础学Web—正则、字符串验证正则、字符串替换
    0基础学Web—正则、字符串验证正则、字符串替换正则正则使用字符串验证正则string方法regexp方法字符串替换正则[]:每个[]代表一位[0-9a-zA-Z][A-z]:字母和_[^0-9]:排除0-9[\u4e00-\u9fa5]:中文元......
  • 字符函数和字符串函数
    字符函数和字符串函数1.字符分类函数需要包含头文件ctype.h2.字符转换函数tolower将参数传进去的⼤写字⺟转⼩写toupper将参数传进去的⼩写字⺟转⼤写3.strlen的使用格式为size_tstrlen(constchar*str);字符串以‘\0’作为结束标志,strlen函数返回......
  • leetcode 2606. 找到最大开销的子字符串
    2606.找到最大开销的子字符串classSolution{public:intmaximumCostSubstring(strings,stringchars,vector<int>&vals){intsize=s.size();vector<int>dp(size);autofound=chars.find(s[0]);if(found==s......
  • C12.【C++ Cont】string类字符串的创建、输入、访问和size函数
    目录1.概念2.string字符串的创建示例代码 运行结果备注 2.string字符串的输入1.cin(字符串没有空格)2.getline(可以读含有空格的字符串)示例代码1:getline传两个参数示例代码2:getline传三个参数3.size函数示例代码运行结果4.访问string类字符串示例代码 运......
  • C# 标准数字格式字符串
    总目录前言当前文章为C#中的格式设置(格式化字符串)大全中的一个小章节。一、概述1.基本信息标准数字格式字符串用于格式化通用数值类型。标准数字格式字符串采用[formatspecifier][precisionspecifier]的形式formatspecifier格式说明符,负责指定数字......
  • 4.字符串
    字符串开题顺序:\(CHBA\)\(A\)QOJ8079.RangePeriodicityQuery设第\(i\)次操作后的字符串为\(s_{i}\)。注意到若\(p\)不是\(s_{i}\)的周期则\(t\)一定不是\(s_{k}(k>i)\)的周期。对于每个\(p_{i}\)作为周期的时间都是一段区间。由luoguP3435[POI2006]......
  • 【Rust自学】8.4. String类型 Pt.2:字节、标量值、字形簇以及字符串的各类操作
    8.4.0.本章内容第八章主要讲的是Rust中常见的集合。Rust中提供了很多集合类型的数据结构,这些集合可以包含很多值。但是第八章所讲的集合与数组和元组有所不同。第八章中的集合是存储在堆内存上而非栈内存上的,这也意味着这些集合的数据大小无需在编译时就确定,在运行时它们......
  • 说说你对js中的数据类型BigInt的理解,它有什么应用场景?
    BigInt在JavaScript中的理解与应用场景一、BigInt的理解BigInt是JavaScript在ES2020中引入的一种新的基本数据类型,它提供了一种表示任意精度整数的能力。在JavaScript中,传统的Number类型是基于IEEE754双精度浮点数格式存储的,这意味着它只能安全地表示-(2^53-1)到(2^53-1)之......