iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP中信息格式化操作的方法
  • 544
分享到

PHP中信息格式化操作的方法

2024-04-02 19:04:59 544人浏览 泡泡鱼
摘要

这篇文章主要介绍“PHP中信息格式化操作的方法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“php中信息格式化操作的方法”文章能帮助大家解决问题。格式化//&nbs

这篇文章主要介绍“PHP中信息格式化操作的方法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“php中信息格式化操作的方法”文章能帮助大家解决问题。

格式化

// 格式化
$fmt = new MessageFORMatter("zh_CN", "{0,number,integer} 只猴子在 {1,number,integer} 颗树上,每只树上有 {2,number} 只猴子");
echo $fmt->format([4560, 123, 4560 / 123]), PHP_EOL;
// 4,560 只猴子在 123 颗树上,每只树上有 37.073 只猴子

$fmt = new MessageFormatter("de", "{0,number,integer} Affen auf {1,number,integer} Bäumen sind {2,number} Affen pro Baum");
echo $fmt->format([4560, 123, 4560 / 123]), PHP_EOL;
// 4.560 Affen auf 123 Bäumen sind 37,073 Affen pro Baum

echo MessageFormatter::formatMessage("zh_CN", "{0,number,integer} 只猴子在 {1,number,integer} 颗树上,每只树上有 {2,number} 只猴子", [4560, 123, 4560 / 123]), PHP_EOL;
// 4,560 只猴子在 123 颗树上,每只树上有 37.073 只猴子

echo MessageFormatter::formatMessage("de", "{0,number,integer} Affen auf {1,number,integer} Bäumen sind {2,number} Affen pro Baum", [4560, 123, 4560 / 123]), PHP_EOL;
// 4.560 Affen auf 123 Bäumen sind 37,073 Affen pro Baum

看到了吗?类似于 PDO 里预编译操作的占位符。在调用 format() 方法后,就可以让这个方法里面的参数来替换占位符的内容。我们可以指定占位的所使用的参数类型和位置,{参数下标,类型,扩展类型} 这就是这个信息数据格式化的占位符的规则定义。看起来貌似很简单呀,其实它还有更多的功能,我们将在后面看到。不过需要注意的是,它只支持数字、日期、文本片段类型,文章最后的参考链接中有官方的文档可以查阅。

MessageFormatter::formatMessage() 这个静态方法可以一次性地指定语言、预操作语句以及替换参数,不需要先进行实例化再调用 format() 方法。

反格式化(根据规则获取参数数组

能够进行格式化,当然我们也能够根据语句规则来反格式化相关的字符串从而获得对应占位符的参数列表。

// 根据格式化规则反向获取规则参数
$fmt = new MessageFormatter("zh_CN", "{0,number,integer} 只猴子在 {1,number,integer} 颗树上,每只树上有 {2,number} 只猴子");
$res = $fmt->parse("4,560 只猴子在 123 树上,每只树上有 37.073 只猴子");
var_export($res); // false
echo "ERROR: " . $fmt->getErrorMessage() . " (" . $fmt->getErrorCode() . ")
";
// ERROR: Parsing failed: U_MESSAGE_PARSE_ERROR (6)

$fmt = new MessageFormatter("en_US", "{0,number,integer} monkeys on {1,number,integer} trees make {2,number} monkeys per tree");
$res = $fmt->parse("4,560 monkeys on 123 trees make 37.073 monkeys per tree");
var_export($res);
// array (
//     0 => 4560,
//     1 => 123,
//     2 => 37.073,
//   )

$fmt = new MessageFormatter("de", "{0,number,integer} Affen auf {1,number,integer} Bäumen sind {2,number} Affen pro Baum");
$res = $fmt->parse("4.560 Affen auf 123 Bäumen sind 37,073 Affen pro Baum");
var_export($res);
// array (
//     0 => 4560,
//     1 => 123,
//     2 => 37.073,
//   )

$fmt = MessageFormatter::parseMessage("de", "{0,number,integer} Affen auf {1,number,integer} Bäumen sind {2,number} Affen pro Baum", "4.560 Affen auf 123 Bäumen sind 37,073 Affen pro Baum");
var_export($fmt);
// array (
//     0 => 4560,
//     1 => 123,
//     2 => 37.073,
//   )

使用实例化后的 parse() 方法或者直接使用静态方法 MessageFormatter::parseMessage() 就能够实现这样的操作。需要注意的是,对于 zh_CN ,也就是中文语言区域设置来说,这个操作是会出问题的。通过 getErrorMessage() 和 getErrorCode() 就可以看到错误信息以及错误代码,可以看到对于中文来说,直接返回的错误信息就是解析失败。

设置获取规则

在实例化的对象中,我们还可以动态地修改规则语句。

// 设置获取规则
$fmt = new MessageFormatter("zh_CN", "{0, number} 猴子在 {1, number} 颗树上");
echo "默认规则: "" . $fmt->getPattern(), PHP_EOL; // 默认规则: "{0, number} 猴子在 {1, number} 颗树上"
echo "格式化结果:" . $fmt->format(array(123, 456)), PHP_EOL; // 格式化结果:123 猴子在 456 颗树上

$fmt->setPattern("{0, number} 颗树上有 {1, number} 猴子");
echo "新规则: "" . $fmt->getPattern(), PHP_EOL; // 新规则: "{0, number} 颗树上有 {1, number} 猴子"
echo "新规则格式化结果: " . $fmt->format(array(123, 456)), PHP_EOL; // 新规则格式化结果:123 颗树上有 456 猴子

非常简单的两个方法,setPattern() 用于设置当前实例化对应的格式化规则,getPattern() 用于获取查看当前实例化对象的格式化规则。在设置了新规则之后,进行 format() 或者 parse() 时就是按照新的规则语句来执行的了。

格式化完整示例

上面说过,除了数字之外,还可以有日期格式的占位符,我们就来演示一下。

echo MessageFormatter::formatMessage("zh_CN", "今天是 {3, date, full},当前时间为 {3, time, ::Hms}, 我要准备开始 {0} 了,今天要和 {2,number,integer} 人见面,还不能忘了要交 {1,number,currency} 元的电费", ["上班", 35.33, 25, new DateTime()]), PHP_EOL;
// 今天是 2020年11月16日星期一,当前时间为 10:09:30, 我要准备开始 上班 了,今天要和 25 人见面,还不能忘了要交 ¥35.33 元的电费

在这段语句中,我们给定的参数顺序并不是按照语句中占位符出现的顺序,这样并没有影响,只需要指定对应位置的参数数组下标即可,比如第一个 {3, date, full} 指定的就是参数数组中的第4个元素(从0开始)。date 类型、time 类型都是可以指定的类型,当然我们也可以指定它们的 日期格式 比如第二个占位符我们就只显示当前的时分秒信息。

如果是字符串信息,那么只需要一个简单的 {0} 就可以了,字符串不需要太多的类型设置。而数字类型则可以直接格式化为货币等类型,就像我们之前讲过的 NumberFormatter 中可以指定的那些类型一样。

看完这一个示例是不是就感觉到这个 MessageFormatter 的强大之处了?别急,它还有更牛X的能力。

根据参数内容进行复数显示

对于复数来说,其实中文语法中并没有这样的语句,比如说一只猫是 a cat ,两只猫是 two cats 。

echo MessageFormatter::formatMessage("en_US", "I Have {0, plural, =0{no cat} =1{a cat} other{# cats}}", [0]),PHP_EOL; // I Have no cat
echo MessageFormatter::formatMessage("en_US", "I Have {0, plural, =0{no cat} =1{a cat} other{# cats}}", [1]),PHP_EOL; // I Have a cat
echo MessageFormatter::formatMessage("en_US", "I Have {0, plural, =0{no cat} =1{a cat} other{# cats}}", [2]),PHP_EOL; // I Have 2 cats

虽说参数类型的 plural 是复数的意思,不过其实我们可以将它看做是一个 switch() 语句的用法。

echo MessageFormatter::formatMessage("zh_CN", "我{0, plural, =0{没有猫} other{有 # 只猫}}", [0]),PHP_EOL; // 我没有猫
echo MessageFormatter::formatMessage("zh_CN", "我{0, plural, =0{没有猫} other{有 # 只猫}}", [1]),PHP_EOL; // 我有 1 只猫
echo MessageFormatter::formatMessage("zh_CN", "我{0, plural, =0{没有猫} other{有 # 只猫}}", [2]),PHP_EOL; // 我有 2 只猫

# 号就是对应的参数值的原内容,这一套语法又让这个 MessageFormatter 类上了一个层次吧,还有呢!我们先来看看这个问题:

echo MessageFormatter::formatMessage("en_US", "I Have {0, plural, =0{no cat} =1{a cat} other{# cats}}", [-1]),PHP_EOL; // I Have -1 cats

参数传错了,-1 只猫可不对吧,没关系,还有别的处理方式解决这个问题。

选择条件规则

// 选择表达式
echo MessageFormatter::formatMessage("en_US", "I Have {0, choice, 0 #no cats| 1 #one cat | 2 #{0, number} cats}", [-1]),PHP_EOL; // I Have no cats
echo MessageFormatter::formatMessage("en_US", "I Have {0, choice, 0 #no cats| 1 #one cat | 2 #{0, number} cats}", [0]),PHP_EOL; // I Have no cats
echo MessageFormatter::formatMessage("en_US", "I Have {0, choice, 0 #no cats| 1 #one cat | 2 #{0, number} cats}", [1]),PHP_EOL; // I Have one cat
echo MessageFormatter::formatMessage("en_US", "I Have {0, choice, 0 #no cats| 1 #one cat | 2 #{0, number} cats}", [2]),PHP_EOL; // I Have 2 cats
echo MessageFormatter::formatMessage("en_US", "I Have {0, choice, 0 #no cats| 1 #one cat | 2 #{0, number} cats}", [10]),PHP_EOL; // I Have 10 cats

choice 这个单词就能看出来,这是一个选择相关的语法。后面的参数其实是一个区间,分别代表 <= 0 | 1 | >=2 的范围内使用哪个内容。另外,一个占位符规则里面还可以继续套占位符号的。

关于“PHP中信息格式化操作的方法”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网PHP编程频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: PHP中信息格式化操作的方法

本文链接: https://www.lsjlt.com/news/96534.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PHP中信息格式化操作的方法
    这篇文章主要介绍“PHP中信息格式化操作的方法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“PHP中信息格式化操作的方法”文章能帮助大家解决问题。格式化//&nbs...
    99+
    2024-04-02
  • PHP中的信息格式化操作有什么用
    这篇文章主要讲解了“PHP中的信息格式化操作有什么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP中的信息格式化操作有什么用”吧!在国际化组件的学习过程中,我们已经接触过了Number...
    99+
    2023-06-20
  • PHP中信息格式化操作详解(MessageFormatter类)
    目录前言格式化反格式化(根据规则获取参数数组)设置获取规则格式化完整示例根据参数内容进行复数显示选择条件规则总结前言 在国际化组件的学习过程中,我们已经接触过了 NumberForm...
    99+
    2024-04-02
  • win10进行全盘格式化操作的方法
    今天小编给大家分享一下win10进行全盘格式化操作的方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。在电脑上下载win10...
    99+
    2023-06-27
  • 电脑c盘格式化操作方法是什么
    本文小编为大家详细介绍“电脑c盘格式化操作方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“电脑c盘格式化操作方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。电脑c盘格式化操作方法:首先打开电脑,...
    99+
    2023-07-01
  • PHP中JSON格式接收请求方法以及对象值操作方法
    导航,芜湖~ 一.PHP中JSON格式接收方法1. 两种方式区别与简介(1)php://input 介绍(2)$_POST和 $_GET介绍(3)php://input 与 $_POST 的使...
    99+
    2023-08-31
    php json
  • R语言与格式,日期格式,格式转化的操作
    R语言的基础包中提供了两种类型的时间数据,一类是Date日期数据,它不包括时间和时区信息,另一类是POSIXct/POSIXlt类型数据,其中包括了日期、时间和时区信息。 基本总结如...
    99+
    2024-04-02
  • Python格式化字符串在实际操作过程中的使用方法
    这篇文章主要讲解了“Python格式化字符串在实际操作过程中的使用方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python格式化字符串在实际操作过程中的使用方法”吧!Python格式化...
    99+
    2023-06-17
  • php实现链式操作的方法
    这篇文章主要介绍php实现链式操作的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!php实现链式操作的方法:1、使用魔法函数“__call”结合“call_user_func”来实现;2、使用魔法函数“__cal...
    99+
    2023-06-15
  • Python浮点数取整、格式化和NaN处理的操作方法
    目录1. 取整的三种方法1.1 强转int类型1.2 采用math.ceil和math.floor1.3 采用round2. 格式化浮点数输出3. 执行精确的小数计算4. 无穷大、负...
    99+
    2024-04-02
  • Appium自动化测试中获取Toast信息操作
    目录Toast简介Toast 定位启动参数配置toast信息存在是否存在判断封装toast信息内容获取Toast简介 Toast是Android中用来显示显示信息的一种机制,和Dia...
    99+
    2024-04-02
  • php中拦截错误信息的方法
    这篇文章主要介绍php中拦截错误信息的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!php拦截错误信息的方法:1、在错误语句之前加上@符号;2、将“display_errors=on”改为off;3、使用函数“d...
    99+
    2023-06-15
  • PHP中针对区域语言标记信息的操作
    相信大家对 zh_CN 这个东西绝对不会陌生,不管是 PHP 中,还是在我们的网页上,都会见到它的身影。其实这就是指定我们的显示编码是什么国家或者地区的,使用何种语言。对于这种区域语...
    99+
    2024-04-02
  • PHP项目中数据库操作的优化方法
    数据库操作优化方法:使用 prepared statements 防止 sql 注入并提高查询速度。使用缓存系统减少查询次数。创建索引提高基于特定条件的查询速度。优化查询,使用有效率的连...
    99+
    2024-05-09
    php 数据库优化 mysql redis
  • SpringBoot集成Jasypt敏感信息加密的操作方法
    目录前言哪些信息需要加密敏感信息加密的作用选择加密的组件项目集成Jasypt方式方式一方式二方式三Springboot整合Jasypt实战一、引入依赖二、配置文件中添加Jasypt配...
    99+
    2024-04-02
  • python中的格式化输出方法
    目录1 使用字符串模运算符(%)格式化输出2 使用 format 方法格式化输出​3 使用 String 方法格式化输出前言: 有几种方法可以显示程序的输出。 数据可以以人类可读的形...
    99+
    2024-04-02
  • python format格式化和数字格式化的方法
    这篇“python format格式化和数字格式化的方法”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python...
    99+
    2023-06-29
  • PHP中怎么操作区域语言标记信息
    小编给大家分享一下PHP中怎么操作区域语言标记信息,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!相信大家对zh_CN这个东西绝对不会陌生,不管是PHP中,还是在我...
    99+
    2023-06-20
  • Ruby操作CSV格式数据方法详解
    CSV格式的数据默认是以逗号分隔各个字段的一条一条记录,默认用换行符分隔每一条记录。此外,有的CSV有标题行,有的没有。还有其他一些格式, 它们都有默认值,但都可以在读、写CSV数据...
    99+
    2024-04-02
  • JAVA使用Ip2region获取IP定位信息的操作方法
    目录先安装依赖下载离线IP定位库下面我们定义类封装ip2region测试输出实际使用ip2region - 准确率99.9%的离线IP地址定位库,0.0x毫秒级查询 ip2regio...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作