【问题标题】:Accessing Google Sheets API array in PHP with named array keys使用命名数组键在 PHP 中访问 Google Sheets API 数组
【发布时间】:2026-01-15 08:10:02
【问题描述】:

使用以下基本 Google Sheets API 代码:

$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 输出,我正在努力理解如何将它放入可以使用命名键的数组中。

下面是 3 行工作表中的 var_dump,第 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'] 等变量。

我需要基于源电子表格的名称是“动态的”,这样如果将来电子表格的列发生更改,数组名称仍然是一致的(例如,日期始终是日期,即使它不再是第一列)。

【问题讨论】:

  • 什么是(array) [3 elements]
  • 即var_dump,电子表格中有3行-标题和两个样本数据行。
  • 那么你格式化的var_dump()有错字吗?
  • 没关系,我现在明白了。你的var_dump() 格式不是我习惯的。供将来参考echo '<pre>'; var_dump($offersvalues); 将有助于避免混淆。

标签: php arrays google-api google-api-php-client


【解决方案1】:

您可以选择使用第一行作为参考或循环遍历所有结果并自己重命名键:

使用第一行作为参考点:

$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 ] );
}

【讨论】:

  • 谢谢,但结果数组只是标题行本身——数组中没有数据行。见pastebin.com/ECcAj6y3
  • @ctrlbrk 糟糕,我有一些错别字。您应该考虑提供一个示例数据数组,我可以轻松地复制和粘贴并测试我的代码。
  • 谢谢,修改后的代码有效。为了将来参考,我是否有一种简单的方法可以将 PHP 数组中的示例数据转储到 * 中?我提供了 var_dump,因为我不确定如何轻松表达它,而没有提供实际的 Google 表格 ID。
  • 为了完整起见,这里是@MonkeyZeus 答案的 var_dump 输出,所以如果其他人也需要同样的...pastebin.com/e1J7hzTk
  • @ctrlbrk 是的。 echo var_export($offersvalues);