Код писал сам, поэтому не особо хотел выкладывать, велосипед. Это завершающий этап алгоритма Кларка-Райта. Я тут проверяю конечность массивов вот так
!next($data[$arrCenter[$i]]['j']) && !next($data[$arrCenter[$i]]['i']
но это не правильно работает.
$machin = 1200;
$iter = ceil((count($data[$arrCenter[$i]]['j']) + count($data[$arrCenter[$i]]['i'])) / 2) + ceil($w / $machin);
for($a=0;$a<$iter;$a++){
if($data[$arrCenter[$i]]['j'][$a]['order'] == 0 && $data[$arrCenter[$i]]['i'][$a]['order'] == 0){
if(($data[$arrCenter[$i]]['i'][$a]['weight'] + $data[$arrCenter[$i]]['j'][$a]['weight']) <= $machin) {
//проверяем вес, если меньше допустимого, записываем точку пути в новый массив и удаляем данный элемент с текущего
$weight[$a] = $data[$arrCenter[$i]]['i'][$a]['weight'] + $data[$arrCenter[$i]]['j'][$a]['weight'];
array_unshift($path[$arrCenter[$i]][$c], $data[$arrCenter[$i]]['i'][$a]['name']);
unset($data[$arrCenter[$i]]['i'][$a]);
echo $data[$arrCenter[$i]]['j'][$a]['name'];echo "<br/>";
array_push($path[$arrCenter[$i]][$c], $data[$arrCenter[$i]]['j'][$a]['name']);
unset($data[$arrCenter[$i]]['j'][$a]);
}
}
if($data[$arrCenter[$i]]['j'][$a]['order'] < $data[$arrCenter[$i]]['i'][$a]['order']){
//проверяем вес, если меньше допустимого, записываем точку пути в новый массив и удаляем данный элемент с текущего
if((array_sum($weight) + $data[$arrCenter[$i]]['j'][$a]['weight']) <= $machin) {
$weight[$a] = array_sum($weight) + $data[$arrCenter[$i]]['j'][$a]['weight'];
array_push($path[$arrCenter[$i]][$c], $data[$arrCenter[$i]]['j'][$a]['name']);
unset($data[$arrCenter[$i]]['j'][$a]);
}
//проверяем вес, если меньше допустимого, записываем точку пути в новый массив и удаляем данный элемент с текущего
if((array_sum($weight) + $data[$arrCenter[$i]]['i'][$a]['weight']) <= $machin){
$weight[$a] = array_sum($weight) + $data[$arrCenter[$i]]['i'][$a]['weight'];
array_unshift($path[$arrCenter[$i]][$c], $data[$arrCenter[$i]]['i'][$a]['name']);
unset($data[$arrCenter[$i]]['i'][$a]);
}
}
if($data[$arrCenter[$i]]['i'][$a]['order'] < $data[$arrCenter[$i]]['j'][$a]['order']){
//проверяем вес, если меньше допустимого, записываем точку пути в новый массив и удаляем данный элемент с текущего
if((array_sum($weight) + $data[$arrCenter[$i]]['i'][$a]['weight']) <= $machin) {
$weight[$a] = array_sum($weight) + $data[$arrCenter[$i]]['i'][$a]['weight'];
array_unshift($path[$arrCenter[$i]][$c], $data[$arrCenter[$i]]['i'][$a]['name']);
unset($data[$arrCenter[$i]]['i'][$a]);
}
//проверяем вес, если меньше допустимого, записываем точку пути в новый массив и удаляем данный элемент с текущего
if((array_sum($weight) + $data[$arrCenter[$i]]['j'][$a]['weight']) <= $machin){
$weight[$a] = array_sum($weight) + $data[$arrCenter[$i]]['j'][$a]['weight'];
array_push($path[$arrCenter[$i]][$c], $data[$arrCenter[$i]]['j'][$a]['name']);
unset($data[$arrCenter[$i]]['j'][$a]);
}
}
//если дошли до конца текущих массивов и они не пустые обнуляем значения
if ((!next($data[$arrCenter[$i]]['j']) && !next($data[$arrCenter[$i]]['i']) && (!empty($data[$arrCenter[$i]]['j']) && !empty($data[$arrCenter[$i]]['j'])))){
$a = -1;
$weight = array();
$data[$arrCenter[$i]]['j']=array_values($data[$arrCenter[$i]]['j']);
$data[$arrCenter[$i]]['i']=array_values($data[$arrCenter[$i]]['i']);
$c++;
$path[$arrCenter[$i]][$c] = array();
$iter = ceil((count($data[$arrCenter[$i]]['j']) + count($data[$arrCenter[$i]]['i'])) / 2);
}
else{
break;
}
}