php - PHP:排序字符串
问题描述
我有一个这样的字符串:
{{14,2,53045,2,1,0,156,100,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0},
{14,2,53045,2,1,0,168,500,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1},
{14,2,53045,2,1,0,168,200,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1},
{14,2,53045,2,1,0,97,200,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0},
{14,2,53139,2,1,0,467,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0},
{14,2,53139,2,1,0,467,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0},
{14,2,53139,2,1,0,467,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0},
{14,2,53139,2,1,0,467,3,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0}}
但我喜欢让所有 8 行都按第 3 个、第 7 个和第 8 个值排序,所以结果是:
{{14,2,53139,2,1,0,467,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0},
{14,2,53139,2,1,0,467,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0},
{14,2,53139,2,1,0,467,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0},
{14,2,53139,2,1,0,467,3,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0
{14,2,53045,2,1,0,156,100,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0},
{14,2,53045,2,1,0,168,500,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1},
{14,2,53045,2,1,0,168,200,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1},
{14,2,53045,2,1,0,97,200,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0}}
有谁知道如何实现这一目标?
提前致谢,
安德烈亚斯
编辑:
SQLite 查询:
select owner, '{{' ||
group_concat(
event||','||parent||','||key||','||target||','||tick_count||','||tick_interval||','
||ifnull(arg1,'NULL')||','||ifnull(arg2,'NULL')||','||ifnull(arg3,'NULL')||','||ifnull(arg4,'NULL')||','
||ifnull(arg5,'NULL')||','||ifnull(arg6,'NULL')||','||ifnull(arg7,'NULL')||','||ifnull(arg8,'NULL')||','
||ifnull(arg9,'NULL')||','||ifnull(arg10,'NULL')||','||ifnull(arg11,'NULL')||','||ifnull(arg12,'NULL')||','
||ifnull(arg13,'NULL')||','||ifnull(arg14,'NULL')||','||ifnull(arg15,'NULL')||','||hasReq, '},{')||'}}' as key_value_pairs
from items_functions WHERE owner = 281201 group by owner
解决方案
此代码将根据您的问题执行您所要求的操作(根据值 3 降序对字符串中的元素进行排序)。正如评论中所指出的,可能有很多更好的方法可以做到这一点,从重写查询开始。但是,如果不了解您是如何使用数据的,就很难说最好的重写方法是什么。
$data = '{{14,2,53045,2,1,0,156,100,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0},
{14,2,53045,2,1,0,168,500,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1},
{14,2,53045,2,1,0,168,200,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1},
{14,2,53045,2,1,0,97,200,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0},
{14,2,53139,2,1,0,467,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0},
{14,2,53139,2,1,0,467,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0},
{14,2,53139,2,1,0,467,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0},
{14,2,53139,2,1,0,467,3,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0}}';
$json = str_replace(array('{', '}', 'NULL'), array('[', ']', '"NULL"'), $data);
$arr = json_decode($json);
//print_r($arr);
// sort based on element 3 descending
usort($arr, function ($a, $b) { return - ($a[2] <=> $b[2]); });
//print_r($arr);
$json = json_encode($arr);
$data = str_replace(array('[', ']', '"NULL"'), array('{', '}', 'NULL'), $json);
print_r($data);
输出:
{{14,2,53139,2,1,0,467,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0},
{14,2,53139,2,1,0,467,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0},
{14,2,53139,2,1,0,467,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0},
{14,2,53139,2,1,0,467,3,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0},
{14,2,53045,2,1,0,156,100,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0},
{14,2,53045,2,1,0,168,500,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1},
{14,2,53045,2,1,0,168,200,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1},
{14,2,53045,2,1,0,97,200,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0}}
推荐阅读
- jms - 使用 Spring Batch 和 Spring Integration 在 master 的同时关闭 worker 的好习惯
- excel - Excel/SQL,在命名范围内排除最后一个“,”
- python - Append values to dict in class inheritance
- database - 如何将访问数据库中的值导入visualbasic组合框?
- r - XGBoost R 中使用 SHAP 值的全局特征重要性
- powershell - Unable to modify registry on Windows IoT
- webpack - 在 webpack 3.6 中防止缓存
- javascript - 向请求添加新标头,同时保留正文
- python - 如何在 cvxpy 变量上使用非原子函数?
- javascript - 使用 JSON 从 JavaScript 中的变体 ID 检查 Shopify 变体库存