从多维数组列表中获取唯一数据

时间:2015-04-16 12:54:31

标签: php arrays

我有来自2个不同查询结果的2条记录。我合并了这些数据。但我必须显示唯一数据取决于 vName 键。 这是我的结果:

{
    "val1": "9",
    "vName": "abc",
    "bname": "",
    "cname": "",
    "brid": "",
    "cmpid": "154",
    "logo": "",
    "banner": "",
    "description": "",
    "catids": "",
    "type": "company",
    "is_nav": "1",
    "bigthumb_logo": "",
    "compressthumb_logo": "",
    "bigthumb_banner": "",
    "compressthumb_banner": "",
    "sp_ar": "Aperitif"
},
{
    "val1": "9",
    "vName": "abc",
    "bname": "abc",
    "cname": "abc",
    "brid": "341",
    "cmpid": "154",
    "logo": "",
    "banner": "6c497c72bfec4c694c1cc2c49066e7a1.png",
    "description": "http:\/\/www.abc.com\/",
    "catids": "9",
    "sp_ar": "Aperitif",
    "type": "company",
    "is_nav": "1",
    "bigthumb_logo": "40cbcede9429cdb44895e0e6f4c050d2.png",
    "compressthumb_logo": "40cbcede9429cdb44895e0e6f4c050d2.png",
    "bigthumb_banner": "6c497c72bfec4c694c1cc2c49066e7a1.png",
    "compressthumb_banner": "6c497c72bfec4c694c1cc2c49066e7a1.png"
}

预期结果应该只是其中之一,与 vName

进行比较
{
    "val1": "9",
    "vName": "abc",
    "bname": "",
    "cname": "",
    "brid": "",
    "cmpid": "154",
    "logo": "",
    "banner": "",
    "description": "",
    "catids": "",
    "type": "company",
    "is_nav": "1",
    "bigthumb_logo": "",
    "compressthumb_logo": "",
    "bigthumb_banner": "",
    "compressthumb_banner": "",
    "sp_ar": "Aperitif"
 }

我如何得到结果?

3 个答案:

答案 0 :(得分:1)

将数据转换为数组,其中键是您的唯一值。

您可以执行以下操作:

$data = array('this is your array of data');
$unique = array();
foreach($data as $value) {
    if(!array_key_exists($value['vName'], $unique)) {
        $unique[$value['vName']] = $value;
    }
}
// $unique now contains only arrays with a unique 'vName', using the first it finds in the original list

$new_array = array_values($unique);

答案 1 :(得分:1)

假设您在$data中存储了一组关联数组,以下代码将根据vName对其进行过滤,并在vName中存储具有唯一$filtered_data的关联数组数组}

$taken = array();

$filtered_data = array_filter($data, function($value) {
    global $taken;
    if (in_array($value['vName'], $taken)) {
        return false;
    }
    else {
        $taken[] = $value['vName'];
        return true;
    }
});

此处,变量$taken会跟踪当前vName中的所有$filtered_data值。如果您发现重复的vName(当前位于$taken中),则会丢弃该元素。

答案 2 :(得分:-2)

试试这个,它应该适合你。

$input = array_map("unserialize", array_unique(array_map("serialize",$input)));