Поиск многомерного массива по ключу, а затем найти конкретный ключ в том же массиве

Я, наконец, сдал Gmail API в PHP но у меня проблемы с получением заголовков, тем и времени из заголовков

У меня есть массив, который выглядит следующим образом, но продолжается и продолжается:

Array
(
[0] => Google_Service_Gmail_MessagePartHeader Object
(
[name] => Subject
[value] => My Subject
[modelData:protected] => Array
(
)

[processed:protected] => Array
(
)

)

[1] => Google_Service_Gmail_MessagePartHeader Object
(
[name] => From
[value] => John Doe
[modelData:protected] => Array
(
)

[processed:protected] => Array
(
)

)

В двух словах, мне просто нужен способ поиска в массиве, когда ['name'] => 'Date' тогда мне нужно хранить то, что находится в ['value'] введите переменную, чтобы я мог повторить это позже. Должен ли я использовать что-то вроде array_search для этого или есть лучший способ?

0

Решение

Если вам не важен порядок заголовков (99% клиентов не будут), вы можете преобразовать его из:
Список (Имя, Значение) для отображения на карте / Dict of Name => Список<Значение>, Для большинства заголовков, которые вас интересуют, в списке будет только одно значение, но это сделает переход от / subject / к заголовкам тривиальным.

В питоне это будет:

заголовки = {}
для заголовка в header_list:
если заголовок ['name'] отсутствует в заголовках:
заголовки ['name'] = []
заголовки [ 'имя']. ​​добавить (заголовок [ 'значение'])
0

Другие решения

Самый простой способ — перебрать массив и проверить name стоимость имущества:

$date_value = '';
foreach ($headers as $header) {
if ('Date' == $header->name) {
$date_value = $header->value;
break;
}
}
var_dump($date_value);

Вот $headers это ваш массив.

0

// Grab only those elements of the array where the items ["name"] key is Date
$b=array_filter($array,function($x){if ($x["name"]=="Date") return true; else return false;});
// Now $b is an array containing all elements of $a that are dates

// Then, echo each one of $b's "value"array_walk($b,function($k,$v){echo $b[$k]["value"];});
0
По вопросам рекламы [email protected]