获取具有关键PHP的不同值的数组

时间:2015-01-23 05:14:25

标签: php arrays

array(
        [0]=> array(3) 
            { 
                [0]=> array(3) 
                { 
                    ["name"]=> string(1) "a" ,
                    ["code"]=> string(3) "416" ,
                    ["id"]=> string(2) "a1" ,
                }, 
                [1]=> array(3)
                { 
                    ["name"]=> string(1) "a", 
                    ["code"]=> string(3) "522" ,
                    ["id"]=> string(2) "a2", 
                }, 
                [2]=> array(3) 
                { 
                    ["name"]=> string(1) "b" ,
                    ["code"]=> string(3) "580" ,
                    ["id"]=> string(2) "b1" ,
                }
            },
        [1]=> array(3) 
            { 
                [0]=> array(3) 
                { 
                    ["name"]=> string(1) "a" ,
                    ["code"]=> string(3) "416" ,
                    ["id"]=> string(2) "a1" ,
                }, 
                [1]=> array(3) 
                { 
                    ["name"]=> string(1) "a" ,
                    ["code"]=> string(3) "522" ,
                    ["id"]=> string(2) "a2" ,
                }, 
                [2]=> array(3) 
                { 
                    ["name"]=> string(1) "b" ,
                    ["code"]=> string(3) "899" ,
                    ["id"]=> string(2) "b2", 
                } 
            } 
    );

我有这样的数组。我需要的是每个数组(例如[0] => array()) 我将搜索内部的数组,并仅为具有不同名称值的数组设置获取array['code']

数组[0]的示例:我将获得array[0][2]['code'],因为此特定array[0][2]['code']的数组有一个唯一的'名称'

1 个答案:

答案 0 :(得分:0)

假设以下代码$array中的$arr[0]来自您的示例:

$array = array(
    array(
        "name" => "a",
        "code" => "416",
        "id" => "a1"
    ),
    array(
        "name" => "a",
        "code" => "522",
        "id" => "a2"
    ),
    array(
        "name" => "b",
        "code" => "580",
        "id" => "b1"
    )
);

$counts = array_count_values(
    array_map(function (array $entry) { return $entry['name']; }, $array)
    // or array_column($array, 'name') in PHP 5.5+
);

$uniqueNames = array_keys(
    array_filter($counts, function ($count) { return $count == 1; })
);

$result = array_filter($array, function (array $entry) use ($uniqueNames) {
    return in_array($entry['name'], $uniqueNames);
});

不一定是超级最有效的方法,而是直接和功能性的。它将数组过滤到name仅存在一次的条目。这可能符合您的定义,也可能不符合您的定义,但您不清楚输入数据的变化情况。