如何将名称下的两个数组合并为一个数组并使其唯一。如您所见,[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!";
}
}
答案 0 :(得分:2)
好的,我知道你现在在做什么。谢谢你包括你的表。
从我看到的情况来看,你正试图从recipe
表中获取所有具有你所传递成分的食谱名称。
解决此问题需要做的事情不是担心如何合并数组,而是如何重做sql查询以便只在一个查询中获取所需的信息。现在你的方式效率不高,因为你每次迭代都会调用一个查询。
您需要做的是使用WHERE IN
和GROUP 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
传递到前端,而无需迭代或合并数组。
希望这有帮助。