проверить, сколько раз значение ключа существует в массиве?

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
    Хотите проверить каждый ключ?
  • 1
    Вы пробовали что-нибудь?
Показать ещё 1 комментарий
Теги:
arrays

4 ответа

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

В качестве альтернативы, если вы просто хотите, чтобы первая запись 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

Образец вывода

1

Вы можете использовать array_filter и count на это:

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

используйте array_key_exists().

  • 0
    Не совсем то, что хотел сделать ОП

Ещё вопросы

Сообщество Overcoder
Наверх
Меню