2013-10-24 1 views
0

저는 작은 전자 상거래 사이트 용 카트 배열을 가지고 있습니다. 저는 건물을 짓고 있으며 알아낼 수없는 루프를 실행했습니다. 내 카트 배열 (다른 ID 번호가있는)에서 3 개의 다른 제품 (2 이상의 관련 제품인지 확실하지 않음)이 있고 두 번째 항목의 수량을 업데이트하려고하면 무한 루프가 발생하고 시도가 발생합니다 기존의 indentical 제품을 업데이트하지 않고 새로운 제품으로 제품을 계속 추가하십시오.PHP 무한 루프 UGH

<?php 
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
//  Section 3 (if user chooses to adjust item quantity) 
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
if (isset($_POST['item_to_adjust']) && $_POST['item_to_adjust'] != "") { 
    // execute some code 
    $item_to_adjust = $_POST['item_to_adjust']; 
    $quantity = $_POST['quantity']; 
    $quantity = preg_replace('#[^0-9]#i', '', $quantity); // filter everything but numbers 
    if ($quantity >= 100) { $quantity = 99; } 
    if ($quantity < 1) { $quantity = 1; } 
    if ($quantity == "") { $quantity = 1; } 
    $i = 0; 
    foreach ($_SESSION["cart_array"] as $each_item) { 
       $i++; 
       while (list($key, $value) = each($each_item)) { 
        if ($key == "item_id" && $value == $item_to_adjust) { 
         // That item is in cart already so let's adjust its quantity using array_splice() 
         array_splice($_SESSION["cart_array"], $i-1, 1, array(array("item_id" => $item_to_adjust, "quantity" => $quantity))); 
        } // close if condition 
       } // close while loop 
    } // close foreach loop 
} 
?> 

기존 제품의 수량을 업데이트하고 다른 것으로 추가하지 않기를 바랍니다. 모든 도움을 미리 감사드립니다!

+0

원인을 발견하기 좀 어렵습니다 ..하지만 하나의 키 노트는 foreach는 대신 사용 foreach는이 컬렉션을 통해 반복에 최적화되어 while 루프를 사용해보십시오. 또한 나는이 배열을 느끼지 않는다 (array (.. thing. – xlordt

답변

1

array_splice 명령에 도달하면 배열 포인터를 재설정 할 수 있으므로 foreach가 다음 항목을 반복 할 때 실제로 첫 번째 항목부터 다시 시작합니다.

내가 제안하는 것은 array_splice 뒤에 플래그를 설정하고 while 루프를 벗어났다는 것입니다. 다음 foreach 반복 전에 플래그를 테스트하고, 그것도 설정되어 있으면 탈출하십시오.

array_splice($_SESSION["cart_array"], $i-1, 1, array(array("item_id" => $item_to_adjust, "quantity" => $quantity))); 
    $breakflag=true; 
    break; 
} 
if($breakflag){ 
    break; 
}