У меня есть многомерный массив, состоящие из IP-адреса и маски подсети:PHP - создать иерархический список из массива подсетей
array(4) {
[0]=>
array(3) {
["ip"]=>
string(12) "192.168.0.0"
["mask"]=>
int(22)
}
[1]=>
array(3) {
["ip"]=>
string(12) "192.168.0.0"
["mask"]=>
int(30)
}
[2]=>
array(3) {
["ip"]=>
string(12) "192.168.0.4"
["mask"]=>
int(31)
}
[3]=>
array(3) {
["ip"]=>
string(12) "192.168.0.4"
["mask"]=>
int(32)
}
}
Массив уже находится в правильном порядке. Следующее, что нужно сделать, это преобразовать этот массив в иерархический список, то желаемый результат должен быть что-то вроде этого:
192.168.0.0/22
- 192.168.0.0/30
- 192.168.0.4/31
-- 192.168.0.4/32
Каждый раза, когда подсеть попадет под большими подсетями, отступ («-») должно быть увеличено на 1, как показано на вышесказанном выше. Я не работаю с предопределенными родительскими идентификаторами, потому что список подсетей может меняться в любой момент. Это преобразование должно выполняться «на лету».
Хотелось бы, чтобы я попробовал что-нибудь, но я не знаю с чего начать. Единственное, о чем я могу думать, это сравнить 2 подсетей на каждой итерации через массив. Сначала сравнить подсети 1 и 2, а затем 2 и 3, затем 3 и 4, и так далее ...
вы пытались что-то? поделитесь им пожалуйста. – Mohammad
@Mohammad Не совсем, как я заявил в своем вопросе, я понятия не имею, с чего начать. Я предложил решение, которое я мог бы попробовать, но насколько это приемлемо? – Beeelze
Одна из проблем, которые у вас есть с вашим примером, заключается в том, что вы рассматриваете IP-адрес и диапазон как взаимозаменяемые. Диапазон не обязательно попадает в другой диапазон. Вы можете запускать проверку функций, если данный IP находится в диапазоне, но диапазоны не обязательно являются иерархическими, как показывает ваш пример. – Ian