JS和PHP中JSON排序方法

代码格式背景(默认按 sort 字段到排序):

# 原 JSON 格式:old_json_arr
    {
        "123": {"name":"成功案例", "sort":2},
        "124": {"name":"品牌优势", "sort":0},
        ...
    }

# 转换后的 JSON 格式:new_json_arr
    [
        {"id":123, "name":"成功案例", "sort":2}},
        {"id":124, "name":"品牌优势", "sort":0}}},
        ...
    ]

-------------------------------------------------------

一、Javascript 的 JSON 代码:

// 因为排序问题,将转换JSON格式 {"123": {"name":"成功案例", "sort":2}...} TO [{"id":123, "name":"成功案例", "sort":2}}...]
function get_new_json(old_json) {
	var arr = [];
	for (var id in old_json) {
		var j = old_json[id]
		j['id'] = parseInt(id);
		arr.push(j);
	}
	return json_orderBy(arr, 'sort', 'DESC');
}

function json_orderBy(arr, col, desc) {
	if (arr.length < 2 || Object.prototype.toString.apply(arr[0]) !== '[object Object]' || !col || !arr[0][col])
		return arr;
	
	var fieldType = typeof arr[0][col];
	if (fieldType === 'number') {
		arr.sort(function(x, y) {
			return x[col] - y[col];
		});
	} else if (fieldType === 'string') {
		arr.sort(function(x, y) {
			return x[col].localeCompare(y[col]);
		});
	}

	if (desc) arr.reverse();
	return arr;
}

var json = get_new_json(old_json);

-------------------------------------------------------

二、PHP 的 JSON 排序代码:

function json_orderBy($old_json_arr = '', $desc = '') {
	
	// 因为排序问题,将转换JSON格式 {"123": {"name":"成功案例", "sort":2}...} TO [{"id":123, "name":"成功案例", "sort":2}}...]
	$new_json_arr = array();
	foreach ($old_json_arr as $id => $row) {
		$row['id'] = $id;
		$new_json_arr[] = $row;
	}

	// 倒排序
	if ($desc === 'DESC') {
		$orderByDesc = function($a, $b) {
			if ($a['sort'] == $b['sort']) return 0;
			return ($a['sort']<$b['sort']) ? 1 : -1;
		};
		usort($new_json_arr, $orderByDesc);
	}

	return $new_json_arr;
}

$json = json_orderBy($old_json_arr, 'DESC');

下图为 Javascript 排序后的结果

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值