如何使用PHP删除JSON对象的重复数据
我需要一个帮助。我有一些JSON类型的数据,我想用PHP删除重复的数据集。我在下面解释我的代码如何使用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_
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
从返回的数组中获取值来解决。我更新了答案中的代码。这将为您提供与输入完全相同的格式。