질문/조언질답게시판
Extra Form
PHP PHP 5.6
CMS XpressEngine

애드온 수정중입니다..

 

애드온에서 입력받은 값 (list)

감자(123)

라이믹스(442)

감귤(663)

 

이라고 할 때

 

$list = explode("\r\n", $addon_info->list);

로 하게 될 경우

 

list 배열에 감자(123), 라이믹스(442) ... 식으로 배열이 나눠지는건 알고있는데..

 

코드를 잘 못봐서 아무리 구글링해도 못찾겠어서 여기서.. 질문드립니다.

 

제가 하고싶은건

 

list 배열안에

 

list->name = 감자

list->code = 123

 

이렇게 괄호 안 숫자를 또 따로 빼서 이름과 숫자로 배열을 나눠서 저장하고싶은데요

 

다른분 코드를 봐도 이해가 안가는 제가 답답하지만..

혹시 도움 주실 분 있으실까요 ㅠㅠ

  • profile
    배열을 객체로 바꿔주면 되지 않나요?
  • profile profile
    코드를 잘 몰라서 아래 기진곰님 댓글에 댓글 남겨놓았는데
    잘못된 부분이 있을까요??
  • profile

    정확히 어떤 형태의 결과를 원하시는지 모르겠네요.

    $list는 배열이라고 말씀하셨는데, $list->name과 $list->code는 객체에 쓰는 문법이니...

    배열 안에 여러 개의 객체를 담고 싶으신 건가요?

     

    몇 가지 힌트를 드리자면

     

    1. '감자(123)'이라는 문자열을 '('를 기준으로 한 번 더 explode하고,

    맨 뒤의 ')'를 지워주면 '감자'와 '123'으로 분리할 수 있습니다.

    정규식 써서 처리하는 방법도 있겠지만 아마 이게 더 직관적일 거예요.

     

    2. 배열에 들어 있는 것들을 어떤 형태로든 변환해서 다시 배열에 담으려면

    기존 배열을 가지고 루프를 돌리면서 변환된 결과를 하나씩 새 배열에 추가한 후,

    기존 배열을 새 배열로 바꿔치기하는 방법이 가장 간단합니다.

     

    3. 줄바꿈이 \r\n이라는 법은 없습니다. \n만 들어오는 경우도 꽤 많아요.

  • profile profile

    제가 다른분 애드온에서 비슷한게 있어서 찾아보고 수정해보았는데요..
    코드를 잘 모르다보니

    $list = explode("\r\n", $addon_info->list);
    foreach($list as $list2)
    {
    $sp = explode('(', $list2);
    $name = $sp[0];

    $code_r = explode(')', $sp[1]);
    $code = $code_r[0];

    $args->name = $name;
    $args->code = $code;
    $list_list[] = $args;
    }

    Context::set('list_list', $list_list);

    이렇게 애드온에서 저장을 해주고
    템플릿에서 {print_r($list)} 해서 뿌려보니
    제일 마지막 줄만 계속 반복되서 나옵니다..
    혹시 수정해야 할 부분이 있을까요??

    Array 값이 [0] 부터 ~ [3] 까지 있다고 쳐도
    제일 마지막 줄 값만 나오더라구요..

  • profile profile

    $args를 초기화하지 않고 계속 재사용하고 있기 때문에 모든 값이 똑같아집니다.
    name과 code를 넣기 전에 $args = new stdClass; 초기화 선언해 주세요.

  • profile

    최신 트릭을 총동원하여 최대한 짧게 코드를 쓰자면

    $list = array_map(function($item) {
        preg_match('/^(.+)\(([^)]+)\)/', trim($item), $m);
        return (object)['name' => $m[1], 'code' => $m[2]];
    }, explode("\n", $addon_info->list));

    뭐 이런 식으로도 가능하기는 합니다. 유지보수는 포기하는 걸로... ㅋㅋㅋ

  • profile profile
    너무 감사드립니다 ㅠㅠ 그런거였군요 다행히 잘 됩니다!! 감사합니다^^