2014-04-09 4 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; 
} 

Он принимает массив идентификаторов для разбиения на страницы запроса. 8 за раз. $ data возвращает только один массив, а не восемь, он должен возвращаться.Почему эта функция возвращает только одно значение массива? (foreach)

Назначение этой функции состоит в том, чтобы выбрать несколько записей из того же столбца и назначить им собственные имена, а затем добавить их к существующим массивам соответственно перед возвратом.

+2

Потому что вы их перезаписью. Удалите '$ data = array();' из цикла 'foreach'. Кроме того, измените '$ data [$ v-> meta_key]' на '$ data [$ v-> meta_key] []'. –

+0

Вы также выбрасываете все данные, которые вы помещаете в '$ data' каждый раз, когда вы делаете' $ data = array(); '. Поместите это * перед * первым «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

сделал u move $ data = array(); за пределами первого foreach? –

+0

да я сделал. Функция передается многомерным массивом, имеет ли это значение? Первый foreach захватывает user_id из каждого массива, а затем создает другой массив, который затем мне нужно объединить в первый, прежде чем возвращать. –

Смежные вопросы