Доступ к массиву API Google Sheets в PHP с помощью именованных ключей массива - PullRequest
0 голосов
/ 11 декабря 2018

Используя следующий базовый код API Google Sheets:

$client = getClient();
$service = new Google_Service_Sheets($client);
$spreadsheetId = 'xxxxxxxxxx';

$offersrange = 'Leads';
$offersresponse = $service->spreadsheets_values->get($spreadsheetId, $offersrange);
$offersvalues = $offersresponse->getValues();

var_dump($offersvalues);die;

Я хочу иметь доступ к массиву с помощью именованных ключей, таких как $ array [date] и $ array [vendor].Но вот вывод var_dump, и я изо всех сил пытаюсь понять, как получить это в массив, где я могу использовать именованный ключ.

Ниже - var_dump из 3-рядного листа, строка 1 - заголовок,строки 2 и 3 являются примерами данных.

array(3) { [0]=> array(7) { [0]=> string(4) "date" [1]=> string(6) "vendor" [2]=> string(6) "userid" [3]=> string(8) "username" [4]=> string(5) "email" [5]=> string(6) "status" [6]=> string(11) "description" } [1]=> array(7) { [0]=> string(8) "12/11/18" [1]=> string(2) "v1" [2]=> string(1) "1" [3]=> string(2) "u1" [4]=> string(2) "e1" [5]=> string(1) "0" [6]=> string(16) "test description" } [2]=> array(7) { [0]=> string(8) "12/11/18" [1]=> string(2) "v2" [2]=> string(1) "2" [3]=> string(2) "u2" [4]=> string(2) "e2" [5]=> string(1) "1" [6]=> string(11) "another one" } }

Форматированный var_dump:

(array) [3 elements]
0: 
(array) [7 elements]
0: (string) "date"
1: (string) "vendor"
2: (string) "userid"
3: (string) "username"
4: (string) "email"
5: (string) "status"
6: (string) "description"
1: 
(array) [7 elements]
0: (string) "12/11/18"
1: (string) "v1"
2: (string) "1"
3: (string) "u1"
4: (string) "e1"
5: (string) "0"
6: (string) "test description"
2: 
(array) [7 elements]
0: (string) "12/11/18"
1: (string) "v2"
2: (string) "2"
3: (string) "u2"
4: (string) "e2"
5: (string) "1"
6: (string) "another one"

В конечном счете, моя цель - иметь возможность ссылаться на такие переменные, как $ row ['status'] и$ row ['date'] в моем коде.

Мне нужно, чтобы имена были «динамическими» на основе исходной электронной таблицы, чтобы в случае изменения столбцов электронной таблицы в будущем имена массивов оставались согласованными.(например, дата всегда является датой, даже если это уже не первый столбец).

1 Ответ

0 голосов
/ 11 декабря 2018

Вы можете выбрать либо использование первой строки в качестве ссылки, либо цикл по всем результатам и переименовать ключи самостоятельно:

Использовать первую строку в качестве точки отсчета:

$cols = array_shift( $offersvalues );
$cols = array_flip( $cols );
$row1_date = $offersvalues[ 0 ][ $cols[ 'date' ] ];

ПереименоватьКолы сами:

$cols = array_shift( $offersvalues );
$new_offersvalues = array();

foreach( $offersvalues as $k=>$v )
{
    $new_offersvalues[ $k ] = array();

    foreach( $v as $k2=>$v2 )
    {
        $new_offersvalues[ $k ][ $cols[ $k2 ] ] = $v2;
    }

    unset( $offersvalues[ $k ] );
}
...