Похоже, мы нашли решение для второго блока выше, которое, похоже, сокращает время обработки примерно на 20%. Оказывается, что метод был правильным, но данные должны были быть в лучшем месте. Мы могли бы сначала отформатировать данные, чтобы они выглядели примерно так:
$parents= array(
'1' => array(
'2' => 'none',
'3' => 'none',
'9' => 'none'
),
'2' => array(
'1' => 'none',
'3' => 'none',
'9' => 'none',
'4' => 'none',
'5' => 'none'
),
'3' => array(
'1' => 'none',
'2' => 'none',
'9' => 'none'
),
'4' => array(
'2' => 'none',
'5' => 'none'
),
'5' => array(
'2' => 'none',
'4' => 'none'
),
'6' => array(
'7' => 'none',
'8' => 'none',
'9' => 'none'
),
'7' => array(
'6' => 'none',
'8' => 'none',
'9' => 'none'
),
'8' => array(
'6' => 'none',
'7' => 'none',
'9' => 'none'
),
'9' => array(
'6' => 'none',
'7' => 'none',
'8' => 'none'
),
'10' => array(
'11' => 'none',
'12' => 'none'
),
'11' => array(
'10' => 'none',
'12' => 'none'
),
'12' => array(
'10' => 'none',
'11' => 'none'
)
);
Или мы могли бы пройти данные в их текущем состоянии и привести их в состояние, в котором мы можем рекурсивно просмотреть их, и коснуться всех точек:
$pass2 = array();
foreach ($pass1 as $parent => $children){
foreach($children as $child => $none){
$pass2[$parent][$child] = true;
$pass2[$child][$parent] = true;
}
}