0

知道为什么这不起作用吗?我正在获取用户设置的标签,并希望获取具有相同标签的其他用户的 ID。

控制器:

$this->load->model('tag_model');
            $data['usr_tags'] = $this->tag_model->get_home_tags($user_id);
            $tags = $this->tag_model->get_home_tags($user_id);
            $tag_array = $tags;
            $data['tag_users'] = $this->tag_model->get_tag_users($tag_array);

模型:

function get_tag_users($tag_array)
    {
            //$tag = array('item1','item2','item3');
            $tag = $tag_array;
            $query_str = 'SELECT DISTINCT user_id FROM tags WHERE tag IN ("'. implode('","', $tag) .'")';

            $query = $this->db->query($query_str);

            if($query->num_rows() > 0) {
                    foreach($query->result_array() as $tag_users) {
                            $data[] = $tag_users;
                    }
                    return $data;
            }else{
                    return false;
            }
    }

错误:

A PHP Error was encountered
Severity: Notice
Message: Array to string conversion
Filename: models/tag_model.php
Line Number: 20
4

2 回答 2

3

控制器

$this->load->model('tag_model');
$data['usr_tags'] = $this->tag_model->get_home_tags($user_id);
$data['tag_users'] = $this->tag_model->get_tag_users($data['usr_tags']);

模型

function get_tag_users($tag_array)
{
    $tags=array();
    foreach($tag_array as $tag)
    {
        $tags[]= $tag['tag'];
    }
    $query_str = 'SELECT DISTINCT user_id FROM tags WHERE tag IN ('.implode(",", $tags).')';
    $query = $this->db->query($query_str);
    if($query->num_rows() > 0)
    {
        return $query->results();
    }
    else
    {
        return false;
    }
}

注意:$data['tag_users']将包含另一个用户 ID 数组。

于 2012-04-09T17:31:21.523 回答
2

$tag_array看起来像这样:

array(4){
    [0]=> array(1){
        ["tag"]=> string(3) "lol"
    }
    [1]=> array(1){
        ["tag"]=> string(4) "here"
    }
    [2]=> array(1){
        ["tag"]=> string(3) "php"
    }
    [3]=> array(1){
        ["tag"]=> string(5) "mysql"
    }
}

它实际上是一个数组数组,你不能implode在它上面使用。发生“数组到字符串”的转换是因为数组的每个元素都是一个数组,PHP 需要将其转换为字符串才能“内爆”它们。

您可以使用array_map从数组中获取每个标签。

function get_tag_users($tag_array)
{
    $tag = array_map(function($a){
        return $a['tag'];
    }, $tag_array);
    $query_str = 'SELECT DISTINCT user_id FROM tags WHERE tag IN ("'. implode('","', $tag) .'")';

如果你没有 PHP 5.3,你可以这样做:

function get_tag_users($tag_array)
{
    $tag = array_map(create_function('$a', 'return $a["tag"];'), $tag_array);
    $query_str = 'SELECT DISTINCT user_id FROM tags WHERE tag IN ("'. implode('","', $tag) .'")';
于 2012-04-09T18:24:41.993 回答