[php 코딩] 코딩 도사님은 이런 경우 어떻게 코딩하시나요?

   조회 3568   추천 0    

[php 코딩] 코딩 도사님은 이런 경우 어떻게 코딩하시나요?

일단 두 가지 예를 들어보겠습니다.

그 중에 어느 것이 바람직한 것인가요?

아니면 더 좋은 코딩 방법이 있다면 알려주시길 바랍니다.


코딩 조건문은 긍정문으로 하라고 하는데...

이런 경우는 다른 방법이 생각나지 않아  두 가지 방법만 알고 있습니다.


// 변수

$cname="홍길동마실";

$name1="갑순이";

$name2="에릭갑돌이";

$name3="홍길동마실||23.323.22";



// 코딩 1)

    if($cname == $name1) echo "";

elseif($cname == $name2) echo "";

elseif(preg_match("/^$cname/", $name3))  echo "";

else echo "잘못된 회원정보1 입니다.";


//코딩 2

if($cname != $name1) {

    if($cname != $name2) {

        if(!preg_match("/^$cname/", $name3)) {

            echo "잘못된 회원정보2 입니다.";

        }            

    }        

}

예전에 나를 도와준 마틴님이란 분이 있어 그분을 기억합니다.
2cpu의 도움주신 많은 분들께 늘 감사드립니다.
☎ HP 010-9678-7900
짧은글 일수록 신중하게.
스미 2019-09
Case문을 쓰셈요 역어서 쓰는건 별루 아님 펑션으로 리턴
     
허인구마틴 2019-09
아~ 그렇군요
case 으로 해서
맞으면 break; 처리...
최종적으로  else 되면 에러처리...ㅎㅎ
     
허인구마틴 2019-09
switch($cname){
        case $name1: break;
        case $name2: break;
case ($cname==$name3 || preg_match("/$cname\|+/", $name3) ? true : false): break;
default:  echo "잘못된 회원정보 입니다.";
}

더 정확하게 고쳤습니다.

case  문에  preg_match를 넣어서 쓰는것은 오늘 구글링해서 처음 해봤습니다.ㅎㅎ
조금 머리에 열이 났지만 재밌네요. ㅎㅎㅎ

https://stackoverflow.com/questions/38830349/preg-match-in-switch-case-in-php?noredirect=1&lq=1
참고한 글입니다.
허인구마틴 2019-09
코딩 1 이 더 좋은 방법이 아닌가요? ㅎㅎㅎ
아니면  $name1 $name2 $name3 을  배열변수에 넣어두고
for  루틴으로 처리해서
처리해서 continue 명령을 사용하는 방법도 있긴 한데...
어떻게 생각하는지요?
병철 2019-09
*비밀글입니다
     
허인구마틴 2019-09
이해가 됩니다.
함수화 하여 상당히 발전된 개념이네요.
ㅎㅎ 감사합니다.
안전한 조건을 위해 === 까지 사용하셨네요 ... 굿입니다.
     
허인구마틴 2019-09
병철님이 알려주신 코드를 실제로  테스트 하여 아래와 같이 완료하였습니다.
----------------------------------

$cname="홍길동마실";

$name1="갑순이";
$name2="에릭갑돌이";
$name3="홍길동마실||23.323.22";

$allow_arr=array($name1, $name2, $name3);

function check_user($check_name, $allow_arr) {
  foreach ($allow_arr as $value) {
    if ($value === $check_name || preg_match("/^$check_name\|+/", $value) ) return True;
    }
    return False;
}

if(!check_user($cname, $allow_arr)) echo "not exist!";
preg_match() 와 strpos() 도 비교해보시고 적절히 상황에 맞춰서 쓰시면 좋습니다.
 https://stackoverflow.com/questions/6433492/preg-match-vs-strpos-for-match-finding
     
허인구마틴 2019-09
병철님의 함수에 strpos를 넣으려고
했는데 결국 실패했습니다
김제연 2019-09
https://www.php.net/array_search
이용하시면 되지 않을까요..
잘 안쓰는 실험적인 구문이지만, 이런것도 돌아가긴 합니다.

$cname = "홍길동마실1";

$name=array();
$name[] = "갑순이";
$name[] = "에릭갑돌이";
$name[] = "홍길동마실||23.323.22";

$check_user = function($arr, $f) {$r=0;array_walk($arr,function(&$v)use(&$r,$f){if(strpos($v,$f) === 0)$r=1;});return $r;};

if (!$check_user($name, $cname)) echo "not exist!";
     
허인구마틴 2019-09
array_walk 는 잘 안쓰는 함수인데도
적용시켜보니 깔끔하게 잘 작동합니다.
더구나 preg_match를 사용하지 않아 속도면에서는 더 빠르게 작동이  될 것으로 보입니다.
     
허인구마틴 2019-09
처음보는 것인데...
function(&$v) 라고 중간에 &을 넣는 것은무엇을 의미하는지 전혀 모르겠습니다. ㅠㅠ
          
PHP를 만든 언어가 C입니다. PHP에서 사용하는 call by reference 인데, 참조자를 전달 받아서 원본 문자열이나 배열값을 직접 사용하고 변경할 수 있는 방법입니다. function 안으로 들어가면 보통 해당 구간에서만 사용하는 지역변수가 되는데, 함수 밖에서 정의한 내용을 조작할 필요가 있을때 가끔 사용합니다. 간단한 샘플을 설명한 곳이 있네요 https://www.javatpoint.com/php-call-by-reference
               
허인구마틴 2019-09
감사합니다.
가끔 한번씩 보는데... 궁금했습니다.

보통 이런 경우는 글로벌 변수로 선언해서 사용하던가
아니면 그냥 return 해당변수; 로 해서 사용하는데...
더 편리한 방법이로군요.
김제연 2019-09
간단한거 찾았네요 ..
$haystack = array (
  'say hello',
  'hello stackoverflow',
  'hello world',
  'foo bar bas'
);

$matches  = preg_grep ('/^hello (\w+)/i', $haystack);

print_r ($matches);
마지막에 matches 의 length 를 구해서 0이면 있는거고 1이면 있는거구요.있으면 array 로 반환도 되구요
     
허인구마틴 2019-09
아주 멋집니다.
preg_grep 가 있다는 사실은 처음 알았습니다.
충분히 이해가 되고 공감이 됩니다.
멋져요.
한번씩 코딩 이야기를 올릴때마다 아주 다양한 솔루션은 정말 놀랍습니다.

length 는
echo count($matches);를 말하는 것이겠지요
          
김제연 2019-09
네 count 해서 .. 0인지 1인지 확인하시면 될듯


QnA
제목Page 1241/5729
2015-12   1787359   백메가
2014-05   5262477   정은준1
2023-08   2460   푸른비가온다
2018-03   5889   김건우
2010-05   10040   임진욱
2017-01   4427   김건우
2016-02   7680   Booraltak
2016-02   8617   chotws
2022-01   3059   새총
2016-02   4783   izegtob
2018-04   3523   김영기
2020-08   3019   c4066
2023-09   2239   pwater
2016-02   3903   복실강아지
2018-04   3758   박문형
2018-04   4832   일리케
2010-07   7303   장태주
2010-07   9534   경박한시민
2016-03   3671   jang
2014-12   4376   뚜뚜김대원
2014-12   6512   서울l승용
2019-06   10436   사랑하라