简体   繁体   中英

Get the array set which has a distinct value for key PHP

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", 
                } 
            } 
    );

I have array like this. All I need is for each array (eg [0]=>array()) I will search for the arrays inside and get the array['code'] only for array set that has distinct name value.

Example for array[0]: I will get the array[0][2]['code'] because the array set of this particular array[0][2]['code'] has a unique 'name'

Assume in the below code $array is $arr[0] from your example:

$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);
});

Not necessarily the super most efficient method, but straight forward and functional. It filters the array down to the entries where name exists only once. This may or may not fit your definition of "unique", it's rather unclear what variations in the input data you may have.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM