检查一个键值在数组中存在了多少次


check how many time a key value exist in array?

我想检查一个key=>value在数组中存在了多少次。我在这里举个例子。查询Array[DriverLocation][driver_id] = 83是否在后面的Array中出现3次。我要做的是,如果存在相同的键值,那么移除这个内部数组,然后继续获取兄弟数据。例子:

Array
(
    [0] => Array
        (
            [DriverLocation] => Array
                (
                    [id] => 15
                    [dispensary_id] => 1
                    [driver_id] => 85
                    [zip_code_id] => 43
                    [created] => 2015-05-20 12:25:34
                )
            [ZipCode] => Array
                (
                    [id] => 43
                    [province_id] => 3846
                    [city] => Rohtak
                    [zip_code] => 15478
                    [status] => active
                )
            [UserProfile] => Array
                (
                    [first_name] => Arman
                    [last_name] => Kumar
                )
        )
    [1] => Array
        (
            [DriverLocation] => Array
                (
                    [id] => 19
                    [dispensary_id] => 1
                    [driver_id] => 43
                    [zip_code_id] => 42
                    [created] => 2015-05-20 12:37:12
                )
            [ZipCode] => Array
                (
                    [id] => 42
                    [province_id] => 3846
                    [city] => Rohtak
                    [zip_code] => 30215
                    [status] => active
                )
            [UserProfile] => Array
                (
                    [first_name] => Pawan
                    [last_name] => Kumar
                )
        )
    [2] => Array
        (
            [DriverLocation] => Array
                (
                    [id] => 20
                    [dispensary_id] => 1
                    [driver_id] => 83
                    [zip_code_id] => 42
                    [created] => 2015-05-20 12:37:28
                )
            [ZipCode] => Array
                (
                    [id] => 42
                    [province_id] => 3846
                    [city] => Rohtak
                    [zip_code] => 30215
                    [status] => active
                )
            [UserProfile] => Array
                (
                    [first_name] => Ramesh
                    [last_name] => Saini
                )
        )
    [3] => Array
        (
            [DriverLocation] => Array
                (
                    [id] => 26
                    [dispensary_id] => 1
                    [driver_id] => 83
                    [zip_code_id] => 43
                    [created] => 2015-05-20 12:43:59
                )
            [ZipCode] => Array
                (
                    [id] => 43
                    [province_id] => 3846
                    [city] => Rohtak
                    [zip_code] => 15478
                    [status] => active
                )
            [UserProfile] => Array
                (
                    [first_name] => Ramesh
                    [last_name] => Saini
                )
        )
    [4] => Array
        (
            [DriverLocation] => Array
                (
                    [id] => 41
                    [dispensary_id] => 1
                    [driver_id] => 83
                    [zip_code_id] => 6
                    [created] => 2015-05-21 05:23:53
                )
            [ZipCode] => Array
                (
                    [id] => 6
                    [province_id] => 3846
                    [city] => Whittier
                    [zip_code] => 90607
                    [status] => active
                )
            [UserProfile] => Array
                (
                    [first_name] => Ramesh
                    [last_name] => Saini
                )
        )
)

PHP5.5可以使用2倍的array_column函数。这个函数将该键的所有值放入一个数组中。

$driver_ids = array_column(array_column($array, 'DriverLocation'), 'driver_id');
print_r(array_count_values($driver_ids));
Result:
Array ( [85] => 1 [43] => 1 [83] => 3 ) 

或5.5之前的PHP版本:

$driver_ids = array_map(function ($ar) {return $ar['DriverLocation']['driver_id'];}, $array);
print_r(array_count_values($driver_ids));

使用array_key_exists()函数

您可以使用array_filtercount:

echo count(array_filter($array,function($element){
    if(isset($element['DriverLocation']['driver_id'])) {
        return $element['DriverLocation']['driver_id'] === 83;
    }
}));

作为另一种选择,如果您只想要83的第一个条目作为驱动程序id,您可以首先收集所有值,将它们放入另一个容器中,并仅将第一个值放在那里并将其用作键。

只是添加一个条件,如果它还没有,把它放在里面,如果它已经存在,不包括,所以最后你只会留下每个车手的第一个唯一条目。

$drivers = array();
foreach($data as $k => $values) {
    if(!isset($drivers[$values['DriverLocation']['driver_id']])) {
        $drivers[$values['DriverLocation']['driver_id']] = $values;
    }
}
// $drivers = array_values($drivers); // optional array re-index
样本输出