如何使用PHP删除JSON对象的重复数据

如何使用PHP删除JSON对象的重复数据,php,json,Php,Json,我需要一个帮助。我有一些JSON类型的数据,我想用PHP删除重复的数据集。我在下面解释我的代码 data=[ {'member_name':member1,'no_of_users':20}, {'member_name':member1,'no_of_users':20}, {'member_name':member1,'no_of_users':20}, {'member_name':member2,'no_of_users':10}, {'member_

我需要一个帮助。我有一些JSON类型的数据,我想用PHP删除重复的数据集。我在下面解释我的代码

data=[
   {'member_name':member1,'no_of_users':20},
    {'member_name':member1,'no_of_users':20},
    {'member_name':member1,'no_of_users':20},
    {'member_name':member2,'no_of_users':10},
   {'member_name':member2,'no_of_users':10},
   {'member_name':member3,'no_of_users':30},
]
下面给出了我的php端代码

$res[]=array('member_name'=>$member,'no_of_members'=>$rowno['cnt']);
$result=var_dump( array_unique( $res, SORT_REGULAR ) );
//$result = json_decode($array, TRUE );
print json_encode($result);

在这里,我们可以看到许多重复数据。我只需要使用PHP从这个JSON对象中删除重复数据。请帮助我。

首先
JSON\u解码
JSON字符串,以便我们可以在PHP中使用它。然后,您应该使用带有标记的
SORT\u REGULAR
array\u unique
删除所有重复项,最后
json\u将其再次编码为json字符串。下面是一个工作示例:

$data = '[
   {"member_name":"member1","no_of_users":20},
    {"member_name":"member1","no_of_users":20},
    {"member_name":"member1","no_of_users":20},
    {"member_name":"member2","no_of_users":10},
   {"member_name":"member2","no_of_users":10},
   {"member_name":"member3","no_of_users":30}
]';

// Make a PHP array from the JSON string.
$array = json_decode( $data, TRUE );

// Only keep unique values, by using array_unique with SORT_REGULAR as flag.
// We're using array_values here, to only retrieve the values and not the keys.
// This way json_encode will give us a nicely formatted JSON string later on.
$array = array_values( array_unique( $array, SORT_REGULAR ) );

// Make a JSON string from the array.
$result = json_encode( $array );
编辑: 根据您在问题中的编辑:
不要将
$result
分配给
var\u dump
。替换
$result=var\u dump(数组唯一($res,排序\u常规))
by
$result=array\u unique($res,SORT\u REGULAR)

这里,我如何解决这个问题。请举例说明

代码部分:

<?php 
    $depositeArray = array( 'deposite'=>array(
            array('email'=>"sajib@gmail.com", 'deposite'=>0),
            array('email'=>"avi@gmail.com", 'deposite'=>0),
            array('email'=>"iqbal@gmail.com", 'deposite'=>0),
            array('email'=>"balla@gmail.com", 'deposite'=>0),
            array('email'=>"sajib@gmail.com", 'deposite'=>0),
            array('email'=>"razib@gmail.com", 'deposite'=>0)
            ),
            'total'=>0);
    $depositeArray = json_encode($depositeArray);
    $depositeArray = json_decode($depositeArray,true);
    $depositeArrayNew = Json_Super_Unique($depositeArray['deposite'],'email');
    $depositeArray['deposite'] = $depositeArrayNew ;
    echo json_encode($depositeArray);
    function Json_Super_Unique($array,$key){
       $temp_array = array();
       foreach ($array as &$v) {
           if (!isset($temp_array[$v[$key]]))
           $temp_array[$v[$key]] =& $v;
       }
       $array = array_values($temp_array);
       return $array;
    }
?>

我也面临同样的挑战,所以我提出了这个简单的解决方案

<?php
//UniqueValues.php
class UniqueValues{
    #The data Array
    private $dataArray;
    /*
        The index you want to get unique values.
        It can be the named index or the integer index.
        In our case it is "member_name"
    */
    private $indexToFilter;

    public function __construct($dataArray, $indexToFilter){
        $this->dataArray = $dataArray;
        $this->indexToFilter = $indexToFilter;
    }
    private function getUnique(){
        foreach($this->dataArray as $key =>$value){
            $id[$value[$this->indexToFilter]]=$key;
        }
        return array_keys(array_flip(array_unique($id,SORT_REGULAR)));
    }
    public function getFiltered(){
        $array = $this->getUnique();
        $i=0;
        foreach($array as $key =>$value){
            $newAr[$i]=$this->dataArray[$value];
            $i++;
        }
        return $newAr;
    }
}
?>

在调用代码中包含该类,仅此而已

<?php
//index.php
include_once('UniqueValues.php');
#Your JSON data
$data = '[
   {"member_name":"member1","no_of_users":20},
    {"member_name":"member1","no_of_users":20},
    {"member_name":"member1","no_of_users":20},
    {"member_name":"member2","no_of_users":10},
   {"member_name":"member2","no_of_users":10},
   {"member_name":"member3","no_of_users":30}
]';
#Convert your JSON to Array
$array = json_decode( $data, TRUE );

/*
Create an object by passing the "Two Dimension Array" in this case "$array" and 
the "index" in this case "member_name" that you want to get the Unique Values
*/
$supper = new UniqueValues($array,"member_name");

/*
Get the unique valued array by calling the getFiltered() function
and encode it to JSON
*/
$result = json_encode( $supper->getFiltered() );

#Let the World See it :)
echo $result;
?>

好的,现在我怎样才能以相同的格式查看这些数据。当我打印输出时,它是这样显示的`array(3){[0]=>array(2){[“member_name”]=>string(15)“Medilink 1”[“no_of_members”]=>string(3)“383”}[7]=>array(2){[“member_name”]=>string(19)“Medilink2”[“no_of_members”]=>string(2)“24”}[11]=>array(2){[“member_name”]=>string(16)“Medilink 3”[“no_of_members”]=>string(1)“8”}}`确保不要忘记最后一行
$result=json_encode($array)
将PHP数组转换回JSON字符串!好的..我按照你说的做了,但是json数据的索引不是按顺序来的。这是因为PHP在使用
array\u unique
后将保留原始数组中的键。这只能通过使用
array\u values
从返回的数组中获取值来解决。我更新了答案中的代码。这将为您提供与输入完全相同的格式。