组合两个关联数组以避免重复


Combining two associative arrays to avoid duplicates

我有一个这样的JSON字符串,但是我不希望元素具有相同的键两次。就像在第二个C的情况下,我希望将特定statusnum添加到父(就像新的组合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
            )
    )