во-первых, спасибо за внимание!
После запуска запроса у меня получился такой результат:
--------------------------------------
|post_id| meta_key | meta_value |
--------------------------------------
| 1 | name | jeff |
--------------------------------------
| 1 | email | [email protected] |
--------------------------------------
| 1 | color | blue |
--------------------------------------
| 2 | name | mary |
--------------------------------------
| 2 | email | [email protected] |
--------------------------------------
| 2 | color | pink |
--------------------------------------
Массив
array(6)
{
[0]=> object(stdClass)#448 (3)
{
["post_id"] => string(1) "1"["meta_key"] => string(4) "name"["meta_value"] => string(4) "jeff"}
[1]=> object(stdClass)#449 (3)
{
["post_id"] => string(1) "1"["meta_key"] => string(4) "email"["meta_value"] => string(10) "[email protected]"}
[2]=> object(stdClass)#450 (3)
{
["post_id"] => string(1) "1"["meta_key"] => string(5) "color"["meta_value"] => string(4) "blue"}
[3]=> object(stdClass)#448 (3)
{
["post_id"] => string(1) "2"["meta_key"] => string(4) "name"["meta_value"] => string(4) "mary"}
[4]=> object(stdClass)#449 (3)
{
["post_id"] => string(1) "2"["meta_key"] => string(4) "email"["meta_value"] => string(10) "[email protected]"}
[5]=> object(stdClass)#450 (3)
{
["post_id"] => string(1) "2"["meta_key"] => string(5) "color"["meta_value"] => string(4) "pink"}
}
Ну, у меня есть 1 идентификатор для 3 меток и 3 значения. Используя PHP, мне нужно знать, как сделать foreach или каждый для печати этих данных, например:
---------------------------------------------------
|post_id| name | email | color |
---------------------------------------------------
| 1 | jeff | [email protected] | blue |
---------------------------------------------------
| 2 | mary | [email protected] | pink |
---------------------------------------------------
Теперь, с помощью Костаса Мицаракиса, у меня есть один код, но этот код, в моем случае, возвращает значения NULL.
Код:
global $wpdb;
$meta_value = interested_get_meta( 'interested_email' );
$results = $wpdb->get_results(
'SELECT post_id, meta_key, meta_value
FROM wp_postmeta
WHERE post_id
IN ( SELECT post_id
FROM wp_postmeta
WHERE meta_value = "'.$meta_value.'")', OBJECT
);
$data = array();
$result = array($results);
foreach($result as $key => $value) {
if (!in_array($value['post_id'], $data)) {
$data[$value['post_id']]['post_id'] = $value['post_id'];
}
if ($value['meta_key'] != 'post_id') {
$data[$value['post_id']][$value['meta_key']] = $value['meta_value'];
}
}
var_dump($data);
Возвращает var_dump:
array(1) { [""]=> array(2) { ["post_id"]=> NULL [""]=> NULL } }
Вы можете преобразовать свой массив с помощью простого foreach:
$output = array();
foreach ($input as $data) {
$output[$data['id']]['id'] = $data['id'];
$output[$data['id']][$data['label']] = $data['value'];
}
Я согласен с @KostasMitsarakis в комментариях выше, что это, вероятно, лучше сделать на уровне sql.
Однако вот код php, который вы, вероятно, ищете:
<?php
$input = [
[
'id' => 1,
'name' => 'jeff',
'email' => '[email protected]',
'color' => 'blue',
],
[
'id' => 2,
'name' => 'mary',
'email' => '[email protected]',
'color' => 'pink',
]
];
$output = [];
foreach ($input as $entry) {
$element = [];
foreach($entry as $key=>$val) {
$element[$key] = $val;
}
$output[] = $element;
}
var_dump($output);
Результат этого:
array(2) {
[0] =>
array(4) {
'id' =>
int(1)
'name' =>
string(4) "jeff"'email' =>
string(10) "[email protected]"'color' =>
string(4) "blue"}
[1] =>
array(4) {
'id' =>
int(2)
'name' =>
string(4) "mary"'email' =>
string(8) "[email protected]"'color' =>
string(4) "pink"}
}
Ну, через несколько часов и кофе, с помощью всех людей, которые написали здесь, я нашел свое решение.
$meta_value = interested_get_meta('interested_email');
global $wpdb;
$results = $wpdb->get_results(
'SELECT post_id, meta_key, meta_value
FROM wp_postmeta
WHERE post_id
IN ( SELECT post_id
FROM wp_postmeta
WHERE meta_value = "'.$meta_value.'")', OBJECT
);
$data = array();
if (is_array($results)) {
foreach($results as $item) {
$data[$item->post_id]['post_id'] = $item->post_id;
$data[$item->post_id][$item->meta_key] = $item->meta_value;
}
}
foreach ($data as $key => $value) { ?>
<li>
<?php echo $value['post_id'];?><br/>
<?php echo $value['name'];?><br/>
<?php echo $value['color'];?><br/>
</li>
<?php }
Спасибо всем, кто помогал в любом случае!
Попробуйте получить результаты в виде массива, используя ARRAY_A.
$meta_value = interested_get_meta( 'interested_email' );
$results = $wpdb->get_results(
'SELECT post_id, meta_key, meta_value
FROM wp_postmeta
WHERE post_id
IN ( SELECT post_id
FROM wp_postmeta
WHERE meta_value = "'.$meta_value.'")', ARRAY_A
);
$data = array();
$result = json_decode($results , true); //Return results as array
foreach($result as $key => $value) {
if (!in_array($value['post_id'], $data)) {
$data[$value['post_id']]['post_id'] = $value['post_id'];
}
if ($value['meta_key'] != 'post_id') {
$data[$value['post_id']][$value['meta_key']] = $value['meta_value'];
}
}
echo 'id name email color <br />';
foreach($data as $key => $value) {
echo $value['post_id'].' '.$value['name'].' '.$value['email'].' '.$value['color'].'<br />';
}
var_dump($data);
Результат (таблица)
id name email color
1 jeff [email protected] blue
2 mary [email protected] pink
Результат (var_dump)
array (size=2)
1 =>
array (size=4)
'post_id' => int 1
'name' => string 'jeff' (length=4)
'email' => string '[email protected]' (length=10)
'color' => string 'blue' (length=4)
2 =>
array (size=4)
'post_id' => int 2
'name' => string 'mary' (length=4)
'email' => string '[email protected]' (length=10)
'color' => string 'pink' (length=4)