Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中的JSON数据形成_Php_Arrays_Json - Fatal编程技术网

PHP中的JSON数据形成

PHP中的JSON数据形成,php,arrays,json,Php,Arrays,Json,我想使用PHP将json按其值分块。下面是示例json { "16506": "10", "16507": "10", "16508": "10", "16509": "10", "16510": "20", "16511": "20", "1651

我想使用PHP将json按其值分块。下面是示例json

{
"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
)