@Dark19

Как проверить конечность массива?

Добрый день, мне нужно по условию проверять не дошел ли я до конца массива $arr['i'] и $arr['j'] (длина у них разная), если дошел то нужно выполнить некие действия. Подскажите как можно проверить не дошел ли до конца массива? Проверять с помощью цикла нет возможности так как там по условиям нужные элементы формируются в новый массив, а из текущего удаляются и текущий массив прогоняется по циклу пока он не станет пустым.
  • Вопрос задан
  • 273 просмотра
Пригласить эксперта
Ответы на вопрос 2
Stalker_RED
@Stalker_RED
Если проверять не в цикле то где? После бесконечного цикла, или перед ним? :)

Надеюсь, я правильно понял задачу
do {
 // some code
} while (!empty($array))

Но вообще странно всё это.
Ответ написан
@Dark19 Автор вопроса
Код писал сам, поэтому не особо хотел выкладывать, велосипед. Это завершающий этап алгоритма Кларка-Райта. Я тут проверяю конечность массивов вот так
!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;
                        }
                    }
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы