01. Array
(
    [0] => stdClass Object
        (

            [name] => email_address
        )

    [1] => stdClass Object
        (

            [name] => nick_name

        )

    [2] => stdClass Object
        (

            [name] => signature

        )

    [3] => stdClass Object
        (
            [name] => profile_image

        )

)

 

 

위 데이터에서 특정 키의 객체 값을 변경해야 하는데요.

코드를 짜다보니까 키값이 변경될 경우 대응이 어려우서 객체의 값을 기준으로 배열의 키값을 반환 받고 싶은데요.

 

$data 가 저 배열을 가지고 있다고 하면

 

[name] => signature 인 배열의 키값인 2를 반환받고 싶습니다.

  • profile

    키를 가지고 값을 찾는 것은 쉽지만, 값을 가지고 키를 찾는 것은 쉽지 않습니다. array_search 함수가 있지만 사실상 처음부터 끝까지 루프를 돌리면서 원하는 값을 찾는 방식이고, 그나마 숫자나 문자열처럼 간단한 구조가 아닌 오브젝트가 들어 있다면 잘 찾아지지 않아요.

    결국 루프 돌리기입니다. ㅡ.ㅡ

  • profile profile
    오브젝트가 이게 예제를 찾기 힘든 이유가 있었군요....
  • profile profile
    차라리 array데이터 값안에 name 이라는 항목만 들어간다면 name오브젝트를 없애고, array자체의 키값을 구분시키도록 데이터화 시키는편이 좀 더 나을지도 모르겠네요.

    그렇게 제작이 어렵다면 어쩔수 없이 반복이고요..ㅠㅠ
  • profile profile
    아.. 이게 라이믹스 코어에서 만드어주는거라서요 ㅋㅋ name만 남긴건 일부러 보기 편하시라고 나머지를 제거한거에요 ㅎ

    몇개 안되니 그냥 루프 돌려서 찾아야 겠습니다.
  • profile profile

    쿼리를 하시는것이 아니라면 PHP에서 리스트가 만개씩 안되는 이상 반복문 돌릴 때 성능 하락이 크게 없으니 걱정마시고 맘껏 쓰셔도 문제 없습니다.

    디비쿼리를 최소화하여 가져온 게시글 리스트를 두번 세번 반복하여 오히려 성능 최적화 하는 사례도 많거든요 (제 사이트의 인스타그램 모듈 기준 최근 성능최적화 했습니다..)

    그래서 반복으로 인해 성능이 문제되실것 같다면 큰 걱정 안하셔도 될듯 합니다.

  • profile profile
    네. 성능 문제가 아니라 일단 반복없이 찾는 함수가 있는지 궁금했는데 없으니 반복해야죠~ 감사합니다.
  • profile
    @기진곰 @람보

    말씀해주신 루프로 확인하는 코드로 완성했습니다. 키값 고정해서 변경될때 마다 코드 수정 안해도 되게 되었네요.

    foreach($displayDatas as $key => $val)
    {
    if($val->name == 'signature')
    {
    $melist = new stdClass;
    $melist->title = Context::getLang('signature');
    $melist->value = $show_sign;
    $displayDatas[$key] = $melist;
    break;
    }
    }
  • profile profile

    $val 값이 $melist 로 만드는 항목과 똑같다면, $melist 변수를 만들필요 없이
    $val->title = Context::getLang('signature');

    $displayDatas[$key] = $val;

    이렇게 코드를 확줄일 수 있을 것 같습니다.

  • profile profile
    네. 알겠습니다. 요건 애드온에서 제가 추가한 거라 다른 코드랑 일관성 유지를 위해 그냥 변수는 똑같이 사용하겠습니다. ㅎ
  • profile
    이 질문 나중에 보시는 분들 이거 활용도에 조금 설명 드리면
    사용자가 입력한 서명을 원하는 것으로 필터링(정규식등 이용) 해서 원하는 서명의 형태로
    $show_sign
    에 담은 다음 운영자가 원하는 필터링 된 서명을 출력해 줄 수 있는 코드의 일부입니다.