将 SQL 查询多维数组输出管理为 stdClass 对象

我在 PHP 5.6 上使用带有控制器和路由的 MVC 框架。


我正在尝试从数据库中定义一些 PHP 变量。


+---------+---------+-------------+---------------+

| meta_id | post_id |  meta_key   |  meta_value   |

+---------+---------+-------------+---------------+

|    3506 |     147 | event_flag  | 1             |

|    3507 |     147 | event_year  | 2019          |

|    3508 |     147 | event_title | Soccer Encore |

+---------+---------+-------------+---------------+

我在这里调用查询。


// Controller:

public function __construct()

    {


        parent::__construct();


        $this->_data['checklist_content'] = $this->_models['wp_stream_settings']->getChecklistMeta(147);

    }

这是查询:


// Model:

function getChecklistMeta($item_id){ // passed $item_id = 147

     $sql = '

        SELECT *

        FROM '.PREFIX.'wp_postmeta

        where post_id = '.$item_id.' and meta_key IN ( "event_flag", "event_year", "event_title" );

    ';

    return $this->db->select($sql, array(':ID' => $item_id));

}

此查询将提供所需的所有信息并将变量放入 stdClass 对象中:


// Data

[checklist_content] => Array

    (

        [0] => stdClass Object

            (

                [meta_id] => 3506

                [post_id] => 147

                [meta_key] => event_flag

                [meta_value] => 1

            )


        [1] => stdClass Object

            (

                [meta_id] => 3507

                [post_id] => 147

                [meta_key] => event_year

                [meta_value] => 2019

            )


但我无法按照我的意愿管理阵列:


echo $data['checklist_content']->{'event_title'};

我尝试使用 array_search:


print_r(array_search("event_title",$this->_data['checklist_content']));

无济于事。


我可以修改 SQL 查询以获得更易于管理的 stdClass 对象,或者以 JSON 格式重新映射它,或者其他。


这样我就可以像这样轻松地显示值“Soccer Encore”:


echo $data['checklist_content']->{'event_title'};

现在我被迫获得这样的变量:


echo $data['checklist_content'][2]->{'meta_value'}; // Outputs "Soccer Encore"

我愿意重新设计查询,甚至可以使用 JSON 方法或序列化来更好地管理变量。


白衣染霜花
浏览 155回答 3
3回答

当年话下

对于 PHP >= 7.0.0 获取meta_value并索引它meta_key:$result = array_column($data['checklist_content'], 'meta_value', 'meta_key');然后:echo $result['event_title'];  //displays Soccer Encore如果您需要保留其他属性:$result = array_column($data['checklist_content'], null, 'meta_key');然后:echo $result['event_title']['meta_value'];  //displays Soccer Encore

梵蒂冈之花

要将数据库的 stdobject 转换为 json 使用 json_decode 它将对象转换为二维数组
打开App,查看更多内容
随时随地看视频慕课网APP