我有一个这样的JSON字符串,但是我不希望元素具有相同的键两次。就像在第二个C
的情况下,我希望将特定status
的num
添加到父(就像新的组合C
应该与num: 60883
(3223 + 57659)status: 0
)。基本上,C
在我的数组中应该只发生一次。其余元素也是如此。
[
{
"C":[
{
"status":"0",
"num":"3223"
},
{
"status":"1",
"num":"45186"
},
{
"status":"2",
"num":"8310"
},
{
"status":"3",
"num":"82"
}
]
},
{
"C":[
{
"status":"0",
"num":"57659"
},
{
"status":"1",
"num":"3017"
}
]
},
{
"F":[
{
"status":"0",
"num":"1506"
},
{
"status":"1",
"num":"31253"
},
{
"status":"2",
"num":"1660"
},
{
"status":"5",
"num":"1017"
}
]
},
{
"F":[
{
"status":"0",
"num":"34024"
},
{
"status":"1",
"num":"2167"
}
]
}
]
我正在使用 PHP 来推送值,在将值推送到里面之前,我可以做些什么来确保没有重复项?
PHP 代码是这样的:
foreach ($Something as $something) {
$data = array(
'status' => $something->status,
'num' => $something->num,
);
$zone_data[$stringWhichIsGenerated][] = $data;
}
// Probably I have to do something here...?
array_push($zone_parent, $zone_data);
从早上开始,我一直在试图想出几种愚蠢的方法来修复它,但直到现在我还没有真正富有成效。
我在我的数组上使用json_encode()
输出它。这个问题可能是重复的,但我真的找不到任何对我有用的东西。
扩展我的评论,我认为防止这个问题有助于首先使数组真正唯一,特别是当你很幸运,你实际上最初正在制作数组。
测试数据
class Foo {
public $status;
public $num;
public function __construct( $status, $num ) {
$this->status = $status;
$this->num = $num;
}
}
function generateRandomString( $length = 10 ) {
$characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; $ranString = '';
for ($i = 0; $i < $length; $i++)
$ranString .= $characters[rand(0, strlen($characters) - 1)];
return $ranString;
}
$Something = array();
for( $x = 0; $x < 3; $x++ ) {
$Something[$x] = new Foo( $x, rand(0, 100));
}
保持独特
$zone_data = array();
foreach( $Something as $something ) {
$data = array(
'status' => $something->status,
'num' => $something->num,
);
do {
$Key = generateRandomString( 1 );
} while (array_key_exists( $Key, $zone_data ));
$zone_data[$Key][] = $data;
}
结果
[V] => Array
(
[0] => Array
(
[status] => 0
[num] => 72
)
)
[C] => Array
(
[0] => Array
(
[status] => 1
[num] => 75
)
)
[B] => Array
(
[0] => Array
(
[status] => 2
[num] => 6
)
)