Я не уверен, возможно ли это вообще, но читайте дальше, если вас ждут испытания:
Допустим, у меня есть таблица с m столбцами и n строками. Каждый последующий столбец представляет уровень глубины в иерархии. Что-то вроде
GreatGrandParent | GrandParent | Parent | Child
Допустим, я получаю эти данные из базы данных, поэтому я не знаю, сколько там столбцов (следовательно, столбец N). Но я знаю, что людям нравится видеть код, поэтому скажем так:
$data = array(
array('sam', 'john', 'tim', 'tom'),
array('sam', 'john', 'tim', 'dom'),
array('sam', 'john', 'jim', 'ryan'),
array('sam', 'john', 'jim', 'bryan'),
array('sam', 'oscar', 'kim', 'mike'),
array('sam', 'oscar', 'kim', 'ike'),
array('sam', 'oscar', 'liz', 'jared'),
array('sam', 'oscar', 'liz', 'jay'),
array('will', 'ann', 'ray', 'jill'),
array('will', 'ann', 'ray', 'phil'),
array('will', 'ann', 'abe', 'henry'),
array('will', 'ann', 'abe', 'jackie'),
array('will', 'don', 'clive', 'katie'),
array('will', 'don', 'clive', 'bill'),
array('will', 'don', 'hank', 'sherlock'),
array('will', 'don', 'hank', 'bruce'),
);
Теперь, если я хочу иметь объект JSON в форме:
{ data: {
"sam": {
"john": {
"tim": ["tom", "dom"],
"jim": ["ryan", "bryan"]
},
"oscar": {
"kim": ["mike", "ike"],
"liz": ["jared", "jay"]
}
},
"will": {
...etc
}
}
Каков наиболее эффективный и читаемый способ добиться того, чтобы число столбцов не было известно заранее?
Обратите внимание — этот вопрос не о кодировке JSON, а о том, как создать объект / массив, который затем можно запустить через json_encode ().
В идеале решение может использовать любое произвольное количество столбцов. Также будьте ясны, если вы делаете предположения о порядке строк.
Наконец — для моей проблемы решение НЕ может использовать ссылки, имена переменных переменных, имена динамических переменных и т. Д.
—РЕДАКТИРОВАТЬ—
Это не школьная проблема, это актуальная проблема, и мне нужно найти решение для ее реализации. В этом случае я попытался вложить два цикла foreach в один другой, один для строк, а другой для столбцов, но я продолжаю врезаться в стену, чтобы фактически смоделировать вложенные данные.
Я попытался использовать этот подход для вложения нескольких циклов foreach и каждый раз, когда изменяется родительский элемент, чтобы использовать его для обновления массива. Но я думаю, что лучший способ сделать это будет либо рекурсивным, либо построением векторов от конечного узла назад …
Задача ещё не решена.
Других решений пока нет …