2015-05-21 28 views
1

我想檢查一個數組中的key=>value,存在多少次。 我在這裏舉一個例子。在下面的數組中檢查Array [DriverLocation] [driver_id] = 83是否出現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 
       ) 

     ) 

) 
+0

是否要檢查每個鍵? – Med

+1

你嘗試過什麼嗎? – treegarden

+0

我不確定我是否真的遵循你打算做的事情。你想循環,如果你發現之前已經看到的驅動程序ID,忽略並繼續前進?或者你想刪除條目? –

回答

3

你可以從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) 

或PHP版本之前5.5:

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

print_r(array_count_values($driver_ids)); 
1

使用array_key_exists()功能。

+0

不是真正的OP想要做什麼 – Med

1

你可以使用array_filtercount此:

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

作爲替代方案,如果你只是想83的第一項爲驅動器號,可以首先收集所有的值,放在另外的容器內只把第一個放在那裏,然後用它作爲關鍵。

只需添加一個條件,如果其尚未存在,則將其放入其中,如果其中沒有包含,那麼最終只剩下每個驅動程序的第一個唯一條目。

$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 

Sample Output