为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
白衣染霜花 2021-08-27 09:51:59
我在 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 方法或序列化来更好地管理变量。
查看完整描述

3 回答

?
当年话下

TA贡献1890条经验 获得超9个赞

对于 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


查看完整回答
反对 回复 2021-08-27
?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

要将数据库的 stdobject 转换为 json 使用 json_decode 它将对象转换为二维数组


查看完整回答
反对 回复 2021-08-27
  • 3 回答
  • 0 关注
  • 154 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信