хорошо, немного фона,
это потому, что в результате соединения обычно имеют следующий пример. но я хотел разобрать это, не создавая код для игнорирования повторений. это пример соединения с тремя таблицами. вопрос о повторяющихся значениях возрастает по мере того, как я присоединяюсь к другим таблицам:
table1.authorid table1.authorname table2.books table3.favorited 1 john john's book 1 jean 1 john john's book 1 joe 1 john john's book 2 ken 1 john john's book 2 mark 2 mark mark's book 1 alice 2 mark mark's book 1 ted 2 mark mark's book 2 sarah 2 mark mark's book 2 denise
есть ли способ в codeigniter (или простой PHP), что я могу получить эту форму массива и превратить ее в нечто вроде json (и разобрать его как json)
$result = [ { 'authorid':1, 'authorname':'john', 'books':['john's book1','john's book2'], 'favorited':['jean','joe','ken','mark'] }, { 'authorid':2, 'authorname':'mark', 'books':['mark's book1','mark's book2'], 'favorited':['alice','ted','sarah','denise'] } ]
Обновление : это не ограничивается этой глубиной объектов / массивов (как в примере). он может идти глубже (массивы в массивах, массивы в объектах, объекты в массивах, объекты в объектах)
// first, we need the SQL results in the $result_array variable $sql = 'SELECT ...'; // your SQL command $result_array = $this->db->query($sql)->result_array(); // codeigniter code // here the real answer begins $result = array(); foreach ($result_array as $row) { if (!isset($result[$row['authorid']]) { $author = new StdClass(); $author->authorid = $row['authorid']; $author->authorname = $row['authorname']; $author->books = array($row['books']); $author->favorited = array($row['favorited']); $result[$row['authorid']] = $author; } else { if (!in_array($row['books'], $result[$row['authorid']]->books)) { $result[$row['authorid']]->books[] = $row['books']; } if (!in_array($row['favorited'], $result[$row['authorid']]->favorited)) { $result[$row['authorid']]->favorited[] = $row['favorited']; } } } $result = array_values($result); echo json_encode($result);