(删除重复)reindex多维数组php jquery

时间:2015-07-11 04:10:58

标签: javascript php jquery arrays multidimensional-array

[{
    "sys_id": "2015-07-018",
    "account_id": "2015-07-018",
    "Names": [{
        "fname": "Jackie",
        "mname": "Lee",
        "lname": "Chan",
        "suffix": "Jr",
        "city": "Tokyo",
        "town": "Shinagawa-ku",
        "dstrct": "District 2",
        "street": "Jr",
        "contactnum": "1234"
    }, {
        "fname": "Jackie",
        "mname": "Lee",
        "lname": "Chan",
        "suffix": "Jr",
        "city": "Tokyo",
        "town": "Shinagawa-ku",
        "dstrct": "District 2",
        "street": "Jr",
        "contactnum": "1234"
    }, {
        "fname": "Jackie",
        "mname": "Lee",
        "lname": "Chan",
        "suffix": "Jr",
        "city": "Tokyo",
        "town": "Shinagawa-ku",
        "dstrct": "District 2",
        "street": "Jr",
        "contactnum": "1234"
    }, {
        "fname": "Jackie",
        "mname": "Lee",
        "lname": "Chan",
        "suffix": "Sr",
        "city": "Tokyo",
        "town": "Shinagawa-ku",
        "dstrct": "District 2",
        "street": "Sr",
        "contactnum": "1234"
    }, {
        "fname": "Jackie",
        "mname": "Lee",
        "lname": "Chan",
        "suffix": "Sr",
        "city": "Tokyo",
        "town": "Shinagawa-ku",
        "dstrct": "District 2",
        "street": "Sr",
        "contactnum": "1234"
    }, {
        "fname": "Jackie",
        "mname": "Lee",
        "lname": "Chan",
        "suffix": "Sr",
        "city": "Tokyo",
        "town": "Shinagawa-ku",
        "dstrct": "District 2",
        "street": "Sr",
        "contactnum": "1234"
    }]
}]

这是我从ajax请求的结果我想从服务器端或服务器端的jquery端从结果中删除重复我尝试了删除重复数组的最常见方法,如

$input = array_map("unserialize", array_unique(array_map("serialize", $new_data)));
$new_data1 = array_values($input);
echo json_encode($new_data1, JSON_UNESCAPED_UNICODE);

$new_data中的位置是我的选择查询的结果。 print_r($new_data)将导致

Array(
    [2015 - 07 - 018] => Array(
        [sys_id] => 2015 - 07 - 018[account_id] => 2015 - 07 - 018[Names] => Array(
            [0] => Array(
                [fname] => Jackie[mname] => Lee[lname] => Chan[suffix] => Jr[city] => Tokyo[town] => Shinagawa - ku[dstrct] => District 2[street] => Jr[contactnum] => 1234)[1] => Array(
                [fname] => Jackie[mname] => Lee[lname] => Chan[suffix] => Jr[city] => Tokyo[town] => Shinagawa - ku[dstrct] => District 2[street] => Jr[contactnum] => 1234)[2] => Array(
                [fname] => Jackie[mname] => Lee[lname] => Chan[suffix] => Jr[city] => Tokyo[town] => Shinagawa - ku[dstrct] => District 2[street] => Jr[contactnum] => 1234)[3] => Array(
                [fname] => Jackie[mname] => Lee[lname] => Chan[suffix] => Sr[city] => Tokyo[town] => Shinagawa - ku[dstrct] => District 2[street] => Sr[contactnum] => 1234)[4] => Array(
                [fname] => Jackie[mname] => Lee[lname] => Chan[suffix] => Sr[city] => Tokyo[town] => Shinagawa - ku[dstrct] => District 2[street] => Sr[contactnum] => 1234)[5] => Array(
                [fname] => Jackie[mname] => Lee[lname] => Chan[suffix] => Sr[city] => Tokyo[town] => Shinagawa - ku[dstrct] => District 2[street] => Sr[contactnum] => 1234))))

Update

我尝试了print_r($new_data1);,结果与print_r($new_data);

的结果完全相同

正在寻找删除重复的方法我发现了这个

function super_unique($array) { $result = array_map("unserialize", array_unique(array_map("serialize", $array))); foreach($result as $key => $value) { if (is_array($value)) { $result[$key] = super_unique($value); } } return $result; }

我现在要做的任务是重新索引数组,因为输出是

Array ( [1] => Array ( [sis_id] => 2015-07-018 [account_id] => 2015-07-018 [Names] => Array ( [0] => Array ( [fname] => Jackie [mname] => Lee [lname] => Chan [suffix] => Jr [city] => Tokyo [town] => Shinagawa-ku [brgy] => District 2 [contactnum] => 1234 ) [3] => Array ( [fname] => Jackie [mname] => Lee [lname] => Chan [suffix] => Sr [city] => Tokyo [town] => Shinagawa-ku [brgy] => District 2 [contactnum] => 1234 ) ) ) ) 

我想要输出的旧格式

1 个答案:

答案 0 :(得分:0)

如果将数组中的每个对象序列化为字符串(json在我看来最容易),然后使用本机函数删除重复项,然后反序列化回到对象,该怎么办?

Sudo代码如下所示:

$serialized_array = [];
foreach($new_data as $data) {
    $serialized_array[] = json_encode($data);
}

$new_data = []; //reset new_data
$unique = array_unique($serialized_array);
foreach($serialized_array as $string) {
    $new_data[] = json_decode($string);
}
//new_data should now only contain unique data

您正在做的事情与此之间的主要区别在于序列化和反序列化每个对象而不是整个数组。这是关键。