스크립안에 for문을 사용했는데 결과가 맞질않네요.

스크립안에 for문을 사용했는데 결과가 맞질않네요.

QA

스크립안에 for문을 사용했는데 결과가 맞질않네요.

본문


"items": [
    {
        "display_name"  : '<? echo $pname; ?>',
        "sku"            : '<? echo $prod_id; ?>'
    },
    {
        "display_name"  : '<? echo "Poor"; ?>',
        "sku"            : '<? echo "1234"; ?>',
    }
],


쇼핑카트에 있는 상품을 출력하기위해서 매뉴얼로 위처럼 만들어주면 아래처럼 결과가 잘 나옵니다.

        "items": {
            "4D5E6F": {
                "display_name": "Poor Product Ever",
                "sku": "4D5E6F"
            },
            "1A2B3C": {
                "display_name": "Best Product Ever",
                "sku": "1A2B3C"
            }
        },

그래서 아래처럼 스크립안에 php for문을 써서 만들어 보았는데 2번째 아이템만 출력이 되네요... 뭐가 잘못된건지 아무리봐도 알지못하겠습니다.

아시는분 답변주시면 감사하겠습니다.

 


<?php
echo '"items": [';
    for($i=0; $i<$totalRows; $i++) {    
        $pname = $_SESSION['cart'][$i][0];
        $prod_id = $_SESSION['cart'][$i][1];
 
        echo '{';
        echo '"display_name"   : "'.$pname.'",';
        echo '"sku"            : "'.$prod_id.'"';
 
        if($i < $totalRows){
            echo '},';
        } else if($i == $totalRows -1 ){
            echo '}';
        }
    }
echo '],';
?>

이 질문에 댓글 쓰기 :

답변 2

아래처럼하면 안되나요?
<?php
$array = array();
for($i=0; $i<$totalRows; $i++) {
    $pname = $_SESSION['cart'][$i][0];
    $prod_id = $_SESSION['cart'][$i][1];
 
    $array['items'][] = array(
        'display_name'=>$pname,
        'sku'=>$prod_id
    );
}
echo json_encode($array);

?>

 

자바스크립트에 넣을떄는 아래처럼..

<script> 
var ar = <?php echo json_encode($array) ?>;
</script>

예 아래와같이 결과값이 나옵니다.

{"items":[{"display_name":"559","sku":"1"},{"display_name":"388","sku":"1"}]}

여기서 문제는 처음 시작할때 { 과 끝에 }을 없애야하고 ] 뒤에 , 가 붙어야합니다. 그래야 제대로 출력이 됩니다. 즉 이렇게 출력이 되면 됩니다.

"items":[
  {
"display_name":"559",
"sku":"1"
    },
    {
"display_name":"388",
"sku":"1"
    }
],

알려주신것처럼 해서 이게 가능할까요?

요렇게해보세요

$array = array();
for($i=0; $i<$totalRows; $i++) {
    $pname = $_SESSION['cart'][$i][0];
    $prod_id = $_SESSION['cart'][$i][1];

    $array[]=array('display_name'=>$pname,"sku"=>$prod_id);
}
$encoded = '"items":'.json_encode($items);
echo  $encoded;

답변감사합니다. 스크립트에 넣을때 이렇게 하니까 에러가 나는데 제가 맞게 한건가요?

 

var ar = <?php echo json_encode($encoded)?>;

질문자님이 원하는 방식은 json포맷이 아닙니다. 배열을 그대로 json_encode했을때 에러가 안날텐데..원하시는대로 억지로 바꿔넣다보니 에러가 나는거거든요.
일단 var ar = '<?php echo json_encode($encoded)?>'; 이렇게 하시면 에러는 안나실겁니다.

예 여전히 에러는나지만 한가지 궁금한게있습니다. 제가 아래와같은 형식으로 데이타를 넘겨줘야합니다.

전이게 json형식인줄 알았는데 아니라고 하시니 한번 설명부탁드릴게요...

이렇게 하면 아무문제없이 잘 전달됩니다.

맨마지막 부분이 제가 요청한 부분입니다.

상품이 한개만 있으면 이대로 괜찮지만 쇼핑카트에는 제품이 여러게가 들어갈 수 가있어 함께 전달하려면 이 스크립트안에 for 문을 이용해 전달하려고 한겁니다.

세크리님이 알려주신 부분이 훨씬 손쉬워보여서 마음에 듭니다. 그런데 어찌하여 에러가 나는지 제가 설명을 잘못해서 문제가 생긴거지 시간되시면 한번봐주시면 감사하겠습니다.


<script>

firm.checkout({

  //shipping contact
  "shipping": {
    "name": {
      "first" : '<? echo $ship_fname; ?>',
      "last" : '<? echo $ship_lname; ?>'
    },
    "address": {
      "line1"  : '<? echo $ship_address; ?>',
      "line2"  : '',
      "city"  : '<? echo $ship_city; ?>',
      "state"  : '<? echo $ship_state; ?>',
      "zipcode": '<? echo $ship_zip; ?>'
    },
    "email"          : '<? echo $ship_email; ?>',
    "phone_number"  : '<? echo $ship_dphone; ?>'
  },


  // cart
  "items": [{
    "display_name"  : '<? echo $pname; ?>',
    "sku"            : '<? echo $prod_id; ?>',
    "unit_price"    : <? echo sprintf("%0.2f",$unit_price); ?>,
    "qty"            : <? echo $qty_num; ?>,
    "item_image_url" : '<? echo "https:" . $wLimg; ?>',
    "item_url"      : '<? echo $firm_product_url; ?>'
  }],
...

답변을 작성하시기 전에 로그인 해주세요.
전체 118
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT