2015-11-18 69 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 } 

感謝大家誰以任何方式幫助!