배열의 키값을 다른 배열로 대체하는 쉬운방법이 있을까요

배열의 키값을 다른 배열로 대체하는 쉬운방법이 있을까요

QA

배열의 키값을 다른 배열로 대체하는 쉬운방법이 있을까요

본문

$array1 = array( 

    "0"=> array( 

        "a1" => "x21", 

        "a2" => "z3z", 

        "a3" => "r4r", 

        "a4" => "p21" 

    ), 


    "1"=> array( 

        "a1" => "x2x", 

        "a2" => "zz3", 

        "a3" => "rr1", 

        "a4" => "p3p" 

    )  

); 



$array2 = array( 

        "gga", 

        "ggb", 

        "ggc", 

        "ggd" 

    );

배열 1과 배열 2가 있습니다.

배열 1은 2차원 배열이고

배열2는 배열 1의 키의 갯수와 동일한 갯수의 1차원 배열입니다.


여기서 배열 1의 키를 배열 2의 값으로 대체하면

$array1 = array( 

    "0"=> array( 

        "gga" => "x21", 

        "ggb" => "z3z", 

        "ggc" => "r4r", 

        "ggd" => "p21" 

    ), 


    "1"=> array( 

        "gga" => "x2x", 

        "ggb" => "zz3", 

        "ggc" => "rr1", 

        "ggd" => "p3p" 

    )  

);


이런식으로 되죠..


이걸 반복문을 써서 

하나 하나 바꿨는데요..

배열이 많아지면 한참 걸리더라구요


db테이블에서 여러행을 쿼리후에 

칼럼이름을 다른 배열의 값으로 대체하는 것과 같은 동작이 되겠네요. 


- 테이블의  칼럼 수는 300개 라인은 6만 라인 정도 됩니다. 

- db 에서 사용할 수 없는 문자열이 포함된 경우라서 쿼리후에 키를 바꾸려고 합니다. 


이걸 좀 더 쉽게? 빠르게? 하는 방법이 있을까 해서 문의 드립니다.




연휴 잘 보내세요..

감사합니다.


이 질문에 댓글 쓰기 :

답변 3

1. 셀렉트시 as를 이용해 필드명을 바꾸는게 제일이긴 합니다만


2. 꼭 키를 변경 할 필요가 있나요? 키값의 경우 필요한 경우에만 변경하거나 찾아서 사용하면 될 듯한데.

    => 만들고자 하는 기능을 다시 한 번 살펴보시고 다른 방법 찾기를 권장드립니다.


3. 필요할때 아래 같은 함수로 접근시키기.(업데이트가 아닌 값만 찾아오기)


function tmp_key_val($key_array, $val_array, $search_key) {
    $key = array_search($search_key, $key_array);
    $var = $key_array[$var];
    $result = $val_array[$var];
    return $result;
}
echo tmp_key_val($array2, $array1[0], 'gga');


4. 내장함수로 배열 만들기


$array3[0] = array_combine($array2, $array1[0]);

도움말 감사합니다.

서버를 mysql 구버전(4.x)에서 최신버전으로 옮겼는데
사용할 수 없는 문자열이 많이 생겨서

이미 사용중인 프로그램 자체를 고치긴 일이 너무 많고
데이터 칼럼수도 변경되서

그냥 쿼리후에 배열만 손봐서 돌아가게 만들려고 합니다.

호출할때 키만 같으면 동작은 문제없이 되거든요..

php 내장 함수 찾아 보세요

array_combine() 함수를 이용해 볼 수 있을 듯 합니다. http://www.php.net/manual/en/function.array-combine.php 


속도 개선이 있을지는 모르겠습니다.


$cnt = count($array1);
for ($i = 0; $i < $cnt; $i++) {
  $array1[$i] = array_combine($array2, $array1[$i]);
}
답변을 작성하시기 전에 로그인 해주세요.
전체 80
QA 내용 검색

회원로그인

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