PHP如何将JSON文件读取的数组转为ArrayObject并按字段排序
JSON转PHP数组及排序实现方案
1. JSON转PHP关联数组实现
直接使用PHP内置的json_decode方法即可完成转换,第二个参数传入true时,会自动把JSON中的对象转为PHP关联数组:
// 读取外部JSON文件内容 $jsonContent = file_get_contents('你的JSON文件路径.json'); // 第二个参数设为true,直接完成转换 $phpArray = json_decode($jsonContent, true); // 转换后输出格式和你需求的PHP数组结构完全匹配,示例数据转换后结构如下: /* Array ( [0] => Array ( [serial] => 991 [name] => hello ) [1] => Array ( [serial] => 993 [name] => world ) [2] => Array ( [serial] => 994 [name] => island ) ) */
2. 基于键值排序的实现
方案1:转换为关联数组后使用array_multisort
如果需要按serial字段升序排序,实现代码如下:
// 提取用于排序的目标列 $serialColumn = array_column($phpArray, 'serial'); // 排序规则作用于原数组,SORT_ASC代表升序,如需降序改为SORT_DESC即可 array_multisort($serialColumn, SORT_ASC, $phpArray);
如果需要按name字段字符串排序,修改为:
$nameColumn = array_column($phpArray, 'name'); array_multisort($nameColumn, SORT_ASC, SORT_STRING, $phpArray);
方案2:无需转换为关联数组,直接排序
如果json_decode时不传入第二个参数,得到的是stdClass对象组成的数组,不需要转换格式也可以直接排序:
// 得到对象数组 $objArray = json_decode($jsonContent); // 方式1:依旧使用array_multisort $serialColumn = array_column($objArray, 'serial'); array_multisort($serialColumn, SORT_ASC, $objArray); // 方式2:使用usort实现自定义排序,适合复杂排序场景 usort($objArray, function($a, $b) { // 升序排序,如需降序调换$a和$b的位置即可 return $a->serial <=> $b->serial; });
提示:PHP7.0及以上版本支持太空船运算符<=>,低版本可以替换为$a->serial - $b->serial实现同等效果
内容的提问来源于stack exchange,提问作者dhanyn10
相关产品推荐
相关产品推荐

