[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;
결과 화면
!-->쿼리스트링을 만들려는 소스로 보이는데
아래도 참조하시라 올립니다.
$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;
네. 동작합니다. 그런데 번거롭게 반복문 돌릴 필요가 없습니다. 목적에 맞는 함수가 준비되어 있습니다.
$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
!-->네 됩니다.