【问题标题】:How to remove the extra array from wpdb->get_results如何从 wpdb->get_results 中删除额外的数组
【发布时间】:2020-07-17 16:56:31
【问题描述】:

我有一个数组:

$location= $wpdb->get_results("
                        SELECT
                            town, county, country
                        FROM
                            " . $wpdb->prefix . "table WHERE ID = " . $ID);

这只会返回一行,因为 ID 是唯一的。

我需要将这些数据放入一个数组中,使其看起来像:

array("Base" => $basetype,
                  "Fields" => array("town"=>"Birmingham", "county"=>"West Midlands", "country"=>"UK"))

如果我对这一行进行硬编码,API 可以工作,但如果我尝试使用:

array("Base" => $basetype,
                  "Fields" => $location

我似乎添加了一个我不想要的额外数组:

Array ( [Base] => test [Fields] => Array ( [0] => Array ( [Town] => Birmingham [County] => West Midlands [Country] => UK

如何避免这个额外的数组 (=> Array ( [0])?这是 WordPress 特有的吗?我已经尝试更改get_results的格式,但无济于事。

【问题讨论】:

  • 您做错了什么,不是添加该数组的那一行,如果那不是您使用的代码,请发布您正在使用的确切代码

标签: php arrays wordpress


【解决方案1】:

您可能知道 SQL 只会返回一行,但您的代码不会! get_results 返回所有匹配的行,即一个行数组(作为数组或对象)——即使结果只是一行,它仍然以数组的形式返回。

1 - 使用get_row返回单行

您可以使用get_row 只返回一个结果,例如:

$location = $wpdb->get_row("SELECT town, county, country FROM " 
                           . $wpdb->prefix . "table WHERE ID = " . $ID,
                           ARRAY_A);

注意,您应该在get_row 中使用ARRAY_A 以确保该行作为关联数组返回。

2 - 返回所有行(并且只使用第一个结果)

根据使用此代码的位置,您可能希望代码继续返回一个数组,以便与您使用它的其他地方兼容。你可以这样做:

首先,使用ARRAY_Ain get_results 确保行作为关联数组返回:

$locations = $wpdb->get_results("SELECT town, county, country FROM " 
                              . $wpdb->prefix . "table WHERE ID = " . $ID,
                              ARRAY_A); 

2a - 仅使用代码中的第一行: 如您所知,您只有一行,您只需从查询返回的数组中获取第一个结果:

$first_location = $locations[0];

现在$first_location 包含第一行(也是唯一的),因此您可以在其余代码中使用它(或者您可以直接使用$locations[0])。

2b - 遍历所有行(即使只有一行): 如果您还需要此代码可重用,您可以遍历结果并单独处理每一个。当您的结果只有一行时,循环只会运行一次,例如:

foreach ($locations as $location){
    // Do your stuff here, using $location as before...
    // If you only have one result, then the loop will only run once
}

参考文献

【讨论】:

  • get_row 无需使用ARRAY_A 即可工作。我想我会保持我所有的查询一致。没有意识到结果可能如此不同。谢谢。
  • @IanTurner 如果工作很高兴!仅供参考,如果您不使用ARRAY_A,那么您的查询将返回OBJECT(这是get_rowget_results 的默认值)。使用此结果的代码必须设置为与对象一起使用,而不是您提到的数组……如果您需要更改该代码或需要发布其他问题,请记住以备将来使用: )
猜你喜欢
  • 2014-09-23
  • 2012-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多