2014-04-09 244 views
-1
public static function get_all_user_meta($user_ids = array()) { 
    global $wpdb; 
    foreach ($user_ids as $user_id) { 
     $meta_sql = $wpdb->query($wpdb->prepare("SELECT meta_key, meta_value FROM {$wpdb->usermeta} WHERE user_id = %d", $user_id)); 
     $data = array(); 
     foreach ($wpdb->last_result as $k => $v) { 
      $data[$v->meta_key] = $v->meta_value; 
     } 
    } 
    return $data; 
} 

它接受分頁查詢的ID數組。每次8個。 $ data只返回一個數組,而不是它應該返回的八個數組。這個函數爲什麼只返回一個數組值? (foreach)

此功能的目的是從同一列中選擇多個條目併爲其分配專有名稱,然後在返回之前將它們分別附加到現有數組中。

+2

因爲你覆蓋它們相關聯的例子。從'foreach'循環中刪除'$ data = array();'。另外,將'$ data [$ v-> meta_key]'更改爲'$ data [$ v-> meta_key] []'。 –

+0

您每次執行'$ data = array();'時,都會拋出所有放入'$ data'的數據。把*放在第一個'foreach'之前。 –

回答

4

嘗試爲

foreach ($wpdb->last_result as $k => $v) { 
      $data[$v->meta_key][] = $v->meta_value; 
     } 

多了

$data = array(); 

第一循環外。

您正在獲取不同用戶的meta_key和值,並且這很可能是具有相同元鍵和不同值的不同用戶。 所以我會建議使用返回數組格式

foreach ($wpdb->last_result as $k => $v) { 
    $data[$user_id][$v->meta_key] = $v->meta_value; 
} 

這裏是元關鍵FIRST_NAME可以與多個用戶

select * from wp_usermeta where meta_key = 'first_name' limit 5 ; 
+----------+---------+------------+------------+ 
| umeta_id | user_id | meta_key | meta_value | 
+----------+---------+------------+------------+ 
|  9 |  2 | first_name | Abhik  | 
|  21 |  3 | first_name | John  | 
|  37 |  4 | first_name |   | 
|  55 |  5 | first_name | Ravi | 
|  68 |  6 | first_name | Samual  | 
+----------+---------+------------+------------+ 
+0

我試着添加額外的[],但將所有內容放入數組中。現在它仍然只返回數組中的最後一個值。 –

+0

是否移動$ data = array();第一個foreach之外? –

+0

是的,我做到了。該函數正在傳遞一個多維數組,這是否有所作爲?第一個foreach從每個數組中獲取user_id,然後創建另一個數組,然後在返回之前我需要合併到第一個數組中。 –

相關問題