[php 7.x] 코드가 정상 작동할까요?

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
[php 7.x] 코드가 정상 작동할까요?

QA

[php 7.x] 코드가 정상 작동할까요?

본문

<?php

        foreach ($signParam as $key => $value) {
            $string .= "&$key=$value";
        }

?>

 

이런 php 구문이 있습니다.

이것을 아래와 같이 변경해도 정상적인 결과가 표시될까요?

 

<?php

        foreach ($signParam as $key => $value) {
            $string .= "&{$key}={$value}";
        }

?>

이 질문에 댓글 쓰기 :

답변 4

중괄호를 쓰던 안쓰던 다  된긴 되네요~~

테스트 환경은 7.4.8입니다.

테스트 결과... foreach든... while이든,... for문이든... 쓰실때는

해당 변수가 array로 정의가 되어 있어야 한다는 것입니다.

array가 아니거나 정의가 안되어 있는 경우 에러가 발생합니다.

 

아... 그리고...

순환을 돌리시고자 할때는

반드시 is_countable() 함수로 확인을 하셔야 합니다.

셀 수 있는 경우 (count()함수를 쓸 수 있는 경우) true,

아닌 경우 false를 반환합니다.

 


$string = $string2 = $string3 = "";
$signParam = array(
    "one" => 1,
    "two" => 2,
    "three" => 3,
    "seventeen" => 17
);
foreach ($signParam as $key => $value) {
    $string .= "&{$key}={$value}";
    $string2 .= "&$key=$value";
    $string3 .= "&". $key ."=". $value;
}
echo "string ==> ". $string;
echo "<br>string2 ==> ". $string2;
echo "<br>string3 ==> ". $string3;

echo "<br>================================<br>";
$string = $string2 = $string3 = "";
$signParam = array();
foreach ($signParam as $key => $value) {
    $string .= "&{$key}={$value}";
    $string2 .= "&$key=$value";
    $string3 .= "&". $key ."=". $value;
}
echo "string ==> ". $string;
echo "<br>string2 ==> ". $string2;
echo "<br>string3 ==> ". $string3;

echo "<br>================================<br>";
$string = $string2 = $string3 = "";
$signParam = "";
foreach ($signParam as $key => $value) {
    $string .= "&{$key}={$value}";
    $string2 .= "&$key=$value";
    $string3 .= "&". $key ."=". $value;
}
echo "string ==> ". $string;
echo "<br>string2 ==> ". $string2;
echo "<br>string3 ==> ". $string3;

echo "<br>================================<br>";
$string = $string2 = $string3 = "";
//$signParam = "";
foreach ($signParam as $key => $value) {
    $string .= "&{$key}={$value}";
    $string2 .= "&$key=$value";
    $string3 .= "&". $key ."=". $value;
}
echo "string ==> ". $string;
echo "<br>string2 ==> ". $string2;
echo "<br>string3 ==> ". $string3;

 

결과 화면

2949618301_1596689649.6093.png

쿼리스트링을 만들려는 소스로 보이는데

아래도 참조하시라 올립니다.

 


    $arr = [];
    $string = "";
    $i = 1;
 
    $signParam = ['a'=>'apple', 'b'=>'banna', 'c'=>'cherry'];
 
    foreach ($signParam as $key => $value) {
        if ( $i < sizeof($signParam))
            $string .= "{$key}={$value}&";
        else $string .= "{$key}={$value}";
        $i++;
    }
    echo $string;

참고로 남깁니다.

반복문 내에서 매번 배열의 크기를 구하는 것은 번거롭죠?
$i 변수를 뒀으니 그 값으로 체크하면 됩니다.


    $string = '';
    $i = 0;
 
    $signParam = ['a'=>'apple', 'b'=>'banna', 'c'=>'cherry'];
 
    foreach ($signParam as $key => $value) {
        if ( $i++ ) $string.= '&';
        $string .= "{$key}={$value}";
    }
    echo $string;


별도의 배열을 이용하자면 아래처럼… 그럼 $i가 필요없겠죠?

    $arr = [];
    $string = '';
 
    $signParam = ['a'=>'apple', 'b'=>'banna', 'c'=>'cherry'];
 
    foreach ($signParam as $key => $value) {
        $arr[] = "{$key}={$value}";
    }
    $string = implode('&', $arr);
    echo $string;

네. 동작합니다. 그런데 번거롭게 반복문 돌릴 필요가 없습니다. 목적에 맞는 함수가 준비되어 있습니다.


$string = http_build_query($signParam);

+ http_build_query()

- https://www.php.net/manual/en/function.http-build-query.php

- http://docs.php.net/manual/kr/function.http-build-query.php

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

회원로그인

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