2015-05-21 2 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

Я не уверен, что я действительно следую тому, что вы намерены делать. Вы хотите выполнить цикл, и если вы найдете идентификатор драйвера, который был замечен раньше, игнорируйте и переходите? Или вы хотите удалить запись? –

ответ

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_filter и count для этого:

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

Смежные вопросы