PHP : 세션 2 차원 배열 - 트랙보기 제품
-
03-07-2019 - |
문제
고객이보고있는 마지막 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 줄만 변경하면됩니다.
- Array_Unshift 및 Array_Pop 주변의 추가 배열 ()가 필요하지 않습니다.
- Array_Unshift를 사용하면 다양한 항목 배열 (ID/코드가 아님)을 푸시하고 있습니다.
array_unshift($RView, array($prodid,$name,...))
- $ 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]
도움이되기를 바랍니다!