PHP中的JSON数据形成
我想使用PHP将json按其值分块。下面是示例jsonPHP中的JSON数据形成,php,arrays,json,Php,Arrays,Json,我想使用PHP将json按其值分块。下面是示例json { "16506": "10", "16507": "10", "16508": "10", "16509": "10", "16510": "20", "16511": "20", "1651
{
"16506": "10",
"16507": "10",
"16508": "10",
"16509": "10",
"16510": "20",
"16511": "20",
"16512": "20",
"16513": "30"
}
我的期望是像
10=>[16506,16507,16508,16509]
20=>[16510,16511,16512]
30=>[16513]
是否有任何内置函数是php或必须使用循环?这里我用过
json_decode()和数组_flip()。但数组的翻转使它与众不同。提前感谢有一个内置函数名为
array\u walk
$json='{“16506”:“10”,“16507”:“10”,“16508”:“10”,“16509”:“10”,“16510”:“20”,“16511”:“20”,“16512”:“20”,“16513”:“30”};
数组遍历(json解码($json),函数($value,$key)使用(&$result){
$result[$value][]=$key;
});
打印(结果);
结果:
数组
(
[10] =>阵列
(
[0] => 16506
[1] => 16507
[2] => 16508
[3] => 16509
)
[20] =>阵列
(
[0] => 16510
[1] => 16511
[2] => 16512
)
[30]=>阵列
(
[0] => 16513
)
)
有一个内置函数,名为array\u walk
$json='{“16506”:“10”,“16507”:“10”,“16508”:“10”,“16509”:“10”,“16510”:“20”,“16511”:“20”,“16512”:“20”,“16513”:“30”};
数组遍历(json解码($json),函数($value,$key)使用(&$result){
$result[$value][]=$key;
});
打印(结果);
结果:
数组
(
[10] =>阵列
(
[0] => 16506
[1] => 16507
[2] => 16508
[3] => 16509
)
[20] =>阵列
(
[0] => 16510
[1] => 16511
[2] => 16512
)
[30]=>阵列
(
[0] => 16513
)
)
你可以做下面的事情,只需要经历一个循环
$json = '{
"16506": "10",
"16507": "10",
"16508": "10",
"16509": "10",
"16510": "20",
"16511": "20",
"16512": "20",
"16513": "30"
}';
$ar = json_decode($json);
$newAr = [];
foreach($ar as $k => $v){
$newAr[$v][] = $k;
}
print_r($newAr);
输出将是:
如果你想成为字符串,那就把它内爆
输出将是
你可以做下面的事情,只需要通过一个循环
$json = '{
"16506": "10",
"16507": "10",
"16508": "10",
"16509": "10",
"16510": "20",
"16511": "20",
"16512": "20",
"16513": "30"
}';
$ar = json_decode($json);
$newAr = [];
foreach($ar as $k => $v){
$newAr[$v][] = $k;
}
print_r($newAr);
输出将是:
如果你想成为字符串,那就把它内爆
输出将是
这是我的密码
这是我的代码
你可能在寻找那一行,有人可能会用它来创造,但是的,只要简单地循环它并通过键推动,一个简单的foreach
就足够了……你可能在寻找那一行,有人可能会用它来创造,但是,是的,只要简单地循环它并通过键推动,一个简单的foreach
就足够了……为什么if(在数组中($sd,$json)){
?它总是正确的,因为$sd来自$json,所以它自然是正确的。而您的第二个foreach除了将数据从一个数组移动到另一个数组之外什么都不做。没有什么区别。这是为什么?if(在数组中($sd,$json)){
?它总是正确的,因为$sd来自$json,所以它自然是正确的。而您的第二个foreach除了将数据从一个数组移动到另一个数组之外,什么都不做。没有任何区别。
foreach($newAr as $k => $v){
$newAr[$k] = implode(',',$v);
}
print_r($newAr);
Array
(
[10] => 16506,16507,16508,16509
[20] => 16510,16511,16512
[30] => 16513
)