繁体   English   中英

如何从 wpdb->get_results 中删除额外的数组

[英]How to remove the extra array from wpdb->get_results

我有一个数组:

$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的格式,但无济于事。

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

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 - 返回所有行(并且只使用第一个结果)

根据使用此代码的位置,您可能希望代码继续返回一个数组,以便它与您使用它的其他地方兼容。 您可以按如下方式执行此操作:

首先,在get_results中使用ARRAY_A以确保将行作为关联数组返回:

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

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

$first_location = $locations[0];

现在$first_location包含第一行(也是唯一的),因此您可以在代码的 rest 中使用它(或者您可以直接使用$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
}

参考

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM