为什么这个函数只返回一个数组值? (的foreach)

时间:2014-04-09 14:47:14

标签: php mysql arrays

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只返回一个数组,而不是它应该返回的八个数组。

此函数的目的是从同一列中选择多个条目并为它们指定正确的名称,然后在返回之前将它们分别附加到现有数组。

1 个答案:

答案 0 :(得分: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       |
+----------+---------+------------+------------+