Поиск части ключа массива на PHP

#php #arrays #search

#php #массивы #Поиск

Вопрос:

При печати массива с именем yestardayArray с использованием print_r я получаю следующий результат:

 Array
(
    [project-id] => Array
        (
            [373482] => Array
                (
                    [responsible-ids] => Array
                        (
                            [171812,129938] => Array
                                (
                                    [0] => Array
                                        (
                                            [task-id] => 18055196
                                            [content] => HU-002 
                                            [responsible-ids] => 171812,129938
                                        )

                                )

                            [171812] => Array
                                (
                                    [0] => Array
                                        (
                                            [task-id] => 18055300
                                            [content] => HU-002
                                            [responsible-ids] => 171812
                                        )

                                    [1] => Array
                                        (
                                            [task-id] => 18055307
                                            [content] => HU-002 - BACK 
                                            [responsible-ids] => 171812
                                        )

                                )

                        )

                )

        )

)
  

Я перебираю идентификатор проекта (используя переменную $pid), в случае этого примера «373482», а также перебираю идентификаторы ответственных с помощью $key. В качестве $key я использую все возможные значения responsible-ids для проекта, чтобы получить совпадение и кое-что сделать.

Это отлично работает в случае, если есть только один ответственный (потому что есть полное совпадение), но если их больше, например, в «171812,129938», совпадения нет.

Как бы вы проверили, является ли $key (171812 или 129938) частью responsible-ids («171812,129938»)?

Я попытался преобразовать ключ массива в строку, чтобы использовать встроенные функции поиска php, такие как substr_count или strpos.

 $needString = $yesterdayArray["project-id"][$pid]["responsible-ids"][$key];
  

Но когда я печатаю нужную строку, я получаю «Массив» вместо «171812,129938».

Что я могу сделать?

Комментарии:

1. Это ужасный дизайн. Ключи массива не должны быть в формате, требующем сопоставления, они должны быть тем, что вы можете использовать в качестве прямого поиска.

2. Спасибо за ваш комментарий. Я изменил ключи, чтобы иметь только одно значение для ответственных идентификаторов, чтобы избежать значений, разделенных запятыми

Ответ №1:

Вызовите explode() ключи, а затем используйте in_array() , чтобы проверить, находится ли $key он в массиве.

 foreach ($yesterdayArray["project-id"] as $pid => $project) {
    foreach ($project["responsible-ids"] as $resp_ids => $tasks) {
        $resp_id_array = explode(',', $resp_id);
        if (in_array($key, $resp_id_array)) {
            // do something
        }
    }
}