#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
}
}
}