Array Formation Issue

时间:2017-05-25 作者:Konstantinos Koletsas

我正在运行SQL查询,以获取当前登录用户的post ID。

我的查询按设计工作。

$userGadgets = $wpdb->get_results("SELECT item_id FROM mg_gd_mylist WHERE user_id = \'$user_id\'", ARRAY_A);
我面临的问题与返回的数组有关。

array(
16
) {
[0]=> array(
1
) {
[\\"item_id\\"]=> string(
5
) \\"10318\\" }
[1]=> array(
1
) {
[\\"item_id\\"]=> string(
5
) \\"10378\\" }
[2]=> array(
1
) {
[\\"item_id\\"]=> string(
5
) \\"10566\\" }
[3]=> array(
1
) {
[\\"item_id\\"]=> string(
5
) \\"10608\\" }
[4]=> array(
1
) {
[\\"item_id\\"]=> string(
5
) \\"10614\\" }
我尝试制作的模型如下

Array
(
    [0]  => 140 //The item_id string as an integer


    [1] => 141


    [2] => 142

)
有什么想法吗?提前谢谢你。

1 个回复
最合适的回答,由SO网友:DaveLak 整理而成

这里发生了一些事情。

First, 你得到的是一个多维数组(array of arrays) 其中嵌套数组以列名作为键。原因是您使用ARRAY_A 参数您可以在中阅读有关输出类型的信息the codex entry. 您可以使用默认设置OBJECT. 我会照你说的回答。

Second, 嵌套数组的值是SQL转义字符串。

This answer 给出了一个很好的解释,解释了为什么结果被转义,并建议stripslashes(); 来修复它。

This answer 对于返回字符串而不是整数的原因给出了很好的解释。它建议使用类型转换或PHP函数,但我会使用WordPress函数absint() 确保我有一个非负整数。

所以你可以用这样的方法来达到你想要的结果:

function wpsx_make_item_id_to_int($userGadgets) {
    //Init out collection array
    $item_id_ints = array();

    //Process parent array
    foreach ($userGadgets as $key => $array) {
        //Process nested arrays
        foreach ($array as $column_name => $column_value) {
            //$column_value is your item_ids
            if (is_string($column_value)) {
                //Make ID into int and add it to our colection
                $item_id_ints[] = absint(stripslashes($column_value));
            }
        }
    }
    //Return an associative array of (int)item_ids
    return $item_id_ints;
}
但是,您确定首先需要使用$wpdb吗?我发现,大多数情况下,通过利用内置的WordPress功能和API,您可以实现所需的功能,并获得更轻松和更安全的额外好处。

结束

相关推荐

将WordPress和自动MySQL备份到不同的主机

我正在进行以下设置。本地网络中的开发计算机和具有真实internet域的生产服务器。在我的开发人员计算机上为我的主题开发PHP/CSS文件是通过git, 我可以轻松地将它们部署到生产系统中。到目前为止,一切正常。但在我的开发系统上,我还希望始终从实际系统中获得一个合理的新数据库转储。现在,快速而肮脏的方法就是编写一个cronjob来执行mysqldump 在生产服务器和mysql < dumpfile 在开发人员计算机上。但由于Wordpress将主机名保存在其数据库中,这将导致开发系统无法工作,因