Я использую инфраструктуру MVC с контроллерами и маршрутами на PHP 5.6.
Я пытаюсь определить некоторые переменные 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
)
[2] => stdClass Object
(
[meta_id] => 3508
[post_id] => 147
[meta_key] => event_title
[meta_value] => Soccer Encore
)
)
Но яне могу управлять массивом так, как я хочу:
echo $data['checklist_content']->{'event_title'};
Я пытался использовать array_search:
print_r(array_search("event_title",$this->_data['checklist_content']));
безрезультатно.
Я мог бы изменить запрос SQL вчтобы иметь более управляемый объект stdClass, или, возможно, переназначить его в формате JSON, или еще.
Как я могу изменить запрос или еще, чтобы получить что-то вроде этого:
// Data
[checklist_content] => Array
(
[event_flag] => 1
[event_year] => 2019
[event_title] => Soccer Encore
)
Чтобы я мог легко отобразить значение «Soccer Encore» следующим образом:
echo $data['checklist_content']->{'event_title'};
, сейчас я вынужден получить переменные, подобные этой:
echo $data['checklist_content'][2]->{'meta_value'}; // Outputs "Soccer Encore"
Я открытизменить дизайн запроса или даже использовать метод JSON или сериализацию, чтобы иметь возможность лучше управлять переменными.