채택완료

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

2017-10-02 (월) 20:37:59 3,863

$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개 / 댓글 3개

채택된 답변
+20 포인트
2017-10-02 (월) 20:54:11

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

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

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

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

Copy
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. 내장함수로 배열 만들기

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

답변에 대한 댓글 1개

도움말 감사합니다.

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

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

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

호출할때 키만 같으면 동작은 문제없이 되거든요..
2017-10-02 (월) 20:52:11

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

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

Copy
$cnt = count($array1);for ($i = 0; $i < $cnt; $i++) {  $array1[$i] = array_combine($array2, $array1[$i]);}

답변에 대한 댓글 1개

예제 보면서 연습해보겠습니다. 감사합니다.

php 내장 함수 찾아 보세요

답변에 대한 댓글 1개

감사합니다. 열어놓고 읽어보는 중입니다.

답변을 작성하려면 로그인이 필요합니다.