Codeigniter / PHP:如何合并不同的数组,并使其在查询结果中的唯一数组中唯一

时间:2016-01-31 11:28:55

标签: php mysql arrays codeigniter

ingredient - 成分

menu - 菜单 enter image description here 食谱

console

如何将名称下的两个数组合并为一个数组并使其唯一。如您所见,[0]上的结果是

  

牛肉阿多波

     

QWERTY

     

ISWI

并在1

  

QWERTY

     

ISWI

我希望他们两个都在一个数组中,结果应该是

  

牛肉阿多波

     

QWERTY

     

ISWI

查询:

public function get_halal($name) {

    $terms = explode(',', $name);

    foreach ($terms as $name) {
        $this->db->distinct();
        $this->db->select('r_name');

        $this->db->from('recipe');

        $this->db->join('menu', 'menu.recipe_id = recipe.recipe_id');
        $this->db->join('ingredient', 'ingredient.ingredient_id = menu.ingredient_id');
        $this->db->where('menu.category_id = 2');
        $this->db->like('ingredient.name', $name);

        $query = $this->db->get()->result();

        $data[] = $query;
    }
    return $data;
}

控制器:

public function ajaxSearchHalal() {
    postdata = file_get_contents("php://input");

    if (isset($postdata)) {
        $post = json_decode($postdata);

        $name = $post->name;


        if ($this->user_model->get_halal($name)) {
            $user_id = $this->user_model->get_halal($name);

            $data = array(
                'name' => $user_id,
            );

            echo json_encode($data);
        } else {
            echo json_encode("false");
        }


    } else {
        echo "Error!";
    }
}

1 个答案:

答案 0 :(得分:2)

好的,我知道你现在在做什么。谢谢你包括你的表。

从我看到的情况来看,你正试图从recipe表中获取所有具有你所传递成分的食谱名称。

解决此问题需要做的事情不是担心如何合并数组,而是如何重做sql查询以便只在一个查询中获取所需的信息。现在你的方式效率不高,因为你每次迭代都会调用一个查询。

您需要做的是使用WHERE INGROUP BY来获取所需信息并按列进行分组。像这样重做你的模型方法:

public function get_halal($name) {

    $terms = explode(',', $name);

    $this->db->select("r.name");
    $this->db->from('recipe r');
    $this->db->join('menu m', 'm.recipe_id = r.recipe_id');
    $this->db->join('ingredient i', 'i.ingredient_id = m.ingredient_id');
    $this->db->where('m.category_id = 2');
    $this->db->where_in('i.name', $terms);
    $this->db->group_by('r.recipe_id');
    $q = $this->db->get();
    return $q->result();
}

这将为您提供一个结果集,然后您可以将其作为JSON传递到前端,而无需迭代或合并数组。

希望这有帮助。