WordPress — PHP каждый или foreach для печати данных

во-первых, спасибо за внимание!

После запуска запроса у меня получился такой результат:

--------------------------------------
|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 } }

0

Решение

Вы можете преобразовать свой массив с помощью простого foreach:

$output = array();
foreach ($input as $data) {
$output[$data['id']]['id'] = $data['id'];
$output[$data['id']][$data['label']] = $data['value'];
}
1

Другие решения

Я согласен с @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"}
}
0

Ну, через несколько часов и кофе, с помощью всех людей, которые написали здесь, я нашел свое решение.

$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 }

Спасибо всем, кто помогал в любом случае!

0

Попробуйте получить результаты в виде массива, используя 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)
0
По вопросам рекламы [email protected]