문제

고객이보고있는 마지막 5 개의 제품을 표시하기 위해 배열을 만들려고합니다.

배열은 아래와 같은 2 차원 배열입니다 ...

$ rview = array (array (id = => "1001", refcode => "ref_01", name => "name_01"), ... array (id => "1005", refcode => "ref_05", name = > "name_05"));

배열 값은 제품 레코드 세트에서 검색되며 고객이 제품 페이지를 방문 할 때 다음과 같이 작동하도록 설계되었습니다.

  • 페이지가 세션 배열이 있는지 확인합니다
  • 그렇다면 기존 세션에서 배열 변수가 생성됩니다.
    아니오라면 새 배열이 생성됩니다.
  • 배열은 새로운 제품 세부 사항을 추가합니다.
  • 배열에 5 개 이상의 기존 제품이 있으면 배열이 계산됩니다.
  • 그렇다면 가장 오래된 것을 제거합니다.
    아니오라면 다음 단계로 이동합니다.
  • 수정 된 배열에서 세션이 작성/업데이트됩니다.

내 현재의 노력은 아래에 첨부되어 있습니다 ...
도움을 주셔서 감사합니다.

    <?php 
    session_start() 
    // Get or Create Array
    IF (isset($_SESSION['sessRView'])) {
    $RView = ($_SESSION['sessRView']); } 
    ELSE {
    $RView = array(array()); 
    }

    // Append currently viewed Product to Array
    array(array_unshift($RView, $row_rsPrd['PrdID'], $row_rsPrd['RefCode'], $row_rsPrd['Name']));

    // Check if more than 5 products exist in Array, if so delete.
    IF (sizeof($RView) > 5) {
    array(array_pop($RView)); }

    // Update Session for next page
    $_SESSION['sessRView'] = $RView;

    // Display Array
    for ($row = 0; $row < 5; $row++)
    {
    echo "<ul>";
        echo "<li><a href='?PrdID=".$RView[$row]["PrdID"]."'>".$RView[$row]["RefCode"]."</a> : ".$RView[$row]["Name"]."</li>";
    echo "</ul>";
    }
    ?>
도움이 되었습니까?

해결책

다소 오르거나 적습니다. 단지 2 줄만 변경하면됩니다.

  1. Array_Unshift 및 Array_Pop 주변의 추가 배열 ()가 필요하지 않습니다.
  2. Array_Unshift를 사용하면 다양한 항목 배열 (ID/코드가 아님)을 푸시하고 있습니다. array_unshift($RView, array($prodid,$name,...))
  3. $ rview에 5 개의 요소가 없다면 어떻게해야합니까? 이 경우 정의되지 않은 배열 지수에 액세스 할 수 있습니다 (오류가 표시되거나 표시되지 않을 수도 있음). Foreach 루프로 변경하십시오
    foreach ($Rview as $prod) echo $prod['Name']...

이러한 변경을 한 후에는 작동해야합니다. 그래도 코딩 스타일을 약간 정리하고 싶을 수도 있습니다. :)


편집 : 아, 나는 당신이 for 루프의 배열을 참조 할 때, 배열에 "prodid"및 "name"인덱스가 있음을 알지 못합니다. 배열을 만들 때 => 연산자를 사용하여 인덱스를 정의해야합니다.

  • Array_Unshift를 할 때 배열에 인덱스를 추가합니다.
    array_unshift($RView, array("ProdID" => $row_rsProd["ProdID"], "Name"...))

  • row_rsprod가 너무 크지 않으면 전체 row_rsprod를 $ rview에 대처할 수 있습니다.
    따라서 array_unshift (...)를 그냥 변경하십시오 $RView[] = $row_rsProd
    이런 식으로 인덱스가 보존됩니다.

  • 또는 일치하도록 FOR 루프의 표시를 변경할 수 있습니다. 현재 $ rview로 변하는 배열은 0 기반 - $ rview [0] [0]은 첫 번째 제품 등의 제품 ID입니다.
    따라서 Foreach 루프의 물건을 변경할 수 있습니다.
    echo "<li>..." $prod[0] $prod[1] $prod[2]

도움이되기를 바랍니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top