我想检查一个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_filter
和count
:
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
样本输出