Рекурсивные функции для создания массива JSON со всеми членами семьи (предками и потомками) с использованием php - PullRequest
0 голосов
/ 24 сентября 2018

Функция должна получить идентификатор человека в качестве аргумента, а затем эта функция проходит по всей таблице и находит отца, мать, дедушка и бабушка, жена, дедушка и дедушка жены этого идентификатора.мать, дети, пра-внуки и т. д.

Итак, вот часть моей таблицы MySQL:

CREATE TABLE IF NOT EXISTS family (
  id INT(11) PRIMARY KEY AUTO_INCREMENT NOT NULL, 
  name VARCHAR(250), 
  father INT(11), 
  mother INT(11), 
  husband INT(11),
  wife INT(11), 
  gender ENUM('M','F'), 
  state ENUM('Dead','Alive','Unknown')
);

Позвольте мне привести пример: Если я Папа Такер и мой идентификатор 1 , функция должна принять мой идентификатор 1 т.е. getFamilyMembers (1) и запустить таблицу семейства и выдать что-то какниже:

[ 
  {"id":"10", "gen":"1", "name":"Great Papa", "father":"", "mother":"", "gender":"M", "wife":"9", "husb":""},
  {"id":"9", "gen":"1", "name":"Great Mama", "father":"", "mother":"", "gender":"F", "wife":"", "husb":"10"},
  {"id":"1", "gen":"2", "name":"Papa Tucker", "father":"10", "mother":"9", "gender":"M", "wife":"11", "husb":""},
  {"id":"11", "gen":"2", "name":"Wifey Tucker", "father":"", "mother":"", "gender":"F", "wife":"", "husb":"1"},
  {"id":"21", "gen":"2", "name":"Sis Tucker", "father":"10", "mother":"9", "gender":"F", "wife":"", "husb":""},
  {"id":"2", "gen":"3", "name":"Son Tucker", "father":"1", "mother":"11", "gender":"M", "wife":"", "husb":""}
]

Он выберет моих родителей (Великую Папу и Великую Маму), а затем прикрепит их как 1-е поколение (то есть, если я не добавил родителей моих родителей)затем выберите меня, мою жену и сестру и добавьте нас в качестве 2-го поколения , а затем моего сына в качестве 3-го поколения .

В семье может быть до 10 поколений с целым числом 100 членов , функциядолжен иметь возможность выбирать родственников и организовывать их по поколениям от первого до последнего.

Я думаю, что функция должна быть в состоянии выбрать родителей в первую очередь, и если родители присутствуют, она снова вызывает себяно на этот раз, он должен пройти удостоверение личности родителей и должен продолжать делать это, пока не достигнет большинства родителей (1-го поколения).Как только это будет сделано, он начинает искать детей и продолжает вызывать себя в поисках детей, пока не достигнет последнего потомка (при этом он должен сохранять каждое поколение в массиве), а когда это будет сделано, он может отобразитьМассив JSON.

Теперь я не уверен, использовать ли одну рекурсивную функцию, которая ищет родителей (предков) и детей (потомков), или использовать две функции , где одна ищетпредков и когда это сделано, он вызывает функцию, которая ищет потомков, а затем отображает их.

function getFamilyMembers($id)
{

  $fathers = array();

  if(!empty($id)){

    $QUERY  = $CONNECTION->query("SELECT * FROM family WHERE id = '$id' LIMIT 1");

    if($QUERY->num_rows > 0){

      $RESULT = $QUERY->fetch_array();

      if(!empty($RESULT["father"])){

        array_push($fathers, $RESULT["father"]);
        getFamilyMembers($RESULT["father"]);

      }

    }

  }

  return $fathers;
}

Я не смог произвести ни один из приведенных выше 2 сценариев код-wise.Мы очень признательны за помощь в этом.


Редактировать: Папа Такер имеет отца, чье удостоверение 10, и матери, чье удостоверение личности 9. Я приложил изображение для ясности.

Image of Family Relation

1 Ответ

0 голосов
/ 24 сентября 2018

Судя по внешнему виду таблицы SQL, вы сможете выполнить простой запрос SELECT, который исключает запись отца (в данном случае запись с идентификатором, равным 1), а затем упорядочивает попоколение, то есть "gen"-field.

например, SELECT * from family WHERE id <> 1 ORDER BY "gen"

Я что-то упустил?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...