PHP中glob()和json_encode()函数

最近遇到个小问题,需要遍历出某文件夹下所有文件内容并最终生成一个 JSON 数据格式 然后使用了 glob() 函数来遍历文件 然后使用 json_encode() 函数来处理json数据格式,主要记录下这2个函数的参数 以前都怎么认真看过,其实他们有很多小功能


glob()函数

glob ( string $pattern [, int $flags = 0 ] ) : array
glob() 函数依照 libc glob() 函数使用的规则寻找所有与 pattern 匹配的文件路径,类似于一般 shells 所用的规则一样。不进行缩写扩展或参数替代。
返回一个包含有匹配文件/目录的数组。如果出错返回 FALSE。
flags
有效标记有:

GLOB_MARK - 在每个返回的项目中加一个斜线
GLOB_NOSORT - 按照文件在目录中出现的原始顺序返回(不排序)
GLOB_NOCHECK - 如果没有文件匹配则返回用于搜索的模式
GLOB_NOESCAPE - 反斜线不转义元字符
GLOB_BRACE - 扩充 {a,b,c} 来匹配 ‘a’,’b’ 或 ‘c’
GLOB_ONLYDIR - 仅返回与模式匹配的目录项
GLOB_ERR - 停止并读取错误信息(比如说不可读的目录),默认的情况下忽略所有错误

示例如下

1
2
3
4
5
6
7
8
9
10
foreach(glob('./test/*.txt') as $txt)
{
echo $txt.'<br />';
$file = fopen($txt, 'r');
// ...
}
# 结果如下
# ./test/one.txt
# ./test/two.txt

另外说下 如果是含有中文的路径 一定要转换成当前系统所默认的编码才可以 不然会有读取不出来的问题

json_encode() 函数

json_encode ( mixed $value [, int $options = 0 [, int $depth = 512 ]] ) : string
对变量进行 JSON 编码,返回字符串,包含了 value 值 JSON 形式的表示。 编码受传入的 options 参数影响,此外浮点值的编码依赖于 serialize_precision。
成功则返回 JSON 编码的 string 或者在失败时返回 FALSE 。

要说的是它的 options 参数 他有好多的值可以选择 以前真的没怎么注意过这个东西 JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_NUMERIC_CHECK, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT, JSON_PRESERVE_ZERO_FRACTION, JSON_UNESCAPED_UNICODE, JSON_PARTIAL_OUTPUT_ON_ERROR, JSON_UNESCAPED_LINE_TERMINATORS, JSON_THROW_ON_ERROR. 这些都是可选项

主要讲下其中几个比较常用的

  1. JSON_UNESCAPED_SLASHES 选项表示不要对结果中的 / 进行编码 比如你的结果中含有类似 xx/xx/xx 这种 对他进行编码的时候 如果没有改选项参数 最终结果就会变成 xx\/xx\/xx

  2. JSON_UNESCAPED_UNICODE 选项表示以字面编码多字节 Unicode 字符,就是说如果没有这个的时候 中文之类会变成 \uXXXX 这个样子 比如这样 "title":"\u8bb0\u4e00\u6b21

真的好久都没有认真看过官方文档了,原来还有这么多小功能 惭愧!!!

参考

http://php.net/manual/zh/function.glob.php

http://php.net/manual/en/function.json-encode.php

http://php.net/manual/zh/json.constants.php


-------------The End-------------