2015-11-18 26 views
0

首先感谢您的关注!PHP每个或每个打印数据

运行查询后,我有这样的结果:

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

}

好,我有3个标签和3个值1组的ID。使用PHP,我需要知道如何做一个foreach或每个打印这个数据是这样的:现在

--------------------------------------------------- 
|post_id| name  | email | color | 
--------------------------------------------------- 
| 1 | jeff  | [email protected] | blue  | 
--------------------------------------------------- 
| 2 | mary  | [email protected] | pink  | 
--------------------------------------------------- 

,与科斯塔斯Mitsarakis的帮助下,我有一个代码,但是这个代码,于我而言,是返回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 } } 
+2

你能显示查询吗?我认为如果你有使用SQL的权利结果会更好。 –

+0

做一个'GROUP BY id'和一个ORDER BY,然后将它设置在HTML格式化的表格中。 –

+0

你可以运行并模3,但更好的解决办法是修改查询 – Robert

回答

0

我在上面说的意见@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

Arkascha,你的代码返回的是我开始使用的同一个数组,因为它没有考虑它具有更多的必须处理的相同ID的条目。 –

+0

@JeffersonVasconcelos它肯定不是你开始的数组,因为它的结构是完全不同的:每个ID一行(条目),并不是很多,并且一行(条目)中的单个ID的所有属性。我绝对不明白为什么这个代码应该限制在条目数量上。相反,它实际上是这样实现的,无论每个ID在开始时有多少个ID和多少个属性,它都可以工作。所以:_did你真的看了这个答案吗? :-) – arkascha

+0

@JeffersonVasconcelos事情是你显然修改了你的问题,但没有说明或说明。所以现在很明显,你的条目实际上是对象,而不是数组,这是每个人都期望的,这就是为什么我的代码可能不适用于你的数据。不过,这并不是因为代码返回的数组与您放入的相同(这绝对不是这种情况),而是因为您更改了要解决的任务。对不起。 – arkascha

1

你可以用一个简单的foreach改变你的阵列:

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

感谢您的合作。您的代码首先运行不正常,因为我的原始问题没有很好地制定。然而,这是你的代码,详细说明,让我得到所需的解决方案,在这里分享这个话题。 –

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

Kostas,谢谢你的帮助。您的代码在您写入时执行时运行良好。但是,就我而言,请求正在返回空数组。我会修改我的问题,输入您提供的代码以显示我的问题。 –

+0

注释掉// $ data = array();然后代替:$ results = $ wpdb-> get_results ... WRITE:$ data = $ wpdb-> get_results ...因为您使用$ data,在本例中为空。 –

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 } 

感谢大家谁以任何方式帮助!