티스토리 뷰

반응형

많이 사용한다. json 정말 많이 사용해요~ 제이슨으로 요즘 프로그램을 거의 만드는 것 같아요.

mysql에 저장할때도 이렇게 하면 데이터 처리가 더 편리한 것 같습니다.

파이썬에 열중하지만, 난 php도 중요하다구요~

이걸로 모든 데이터의 그룹화 및 기타 활용을 많이 합니다.

// 데이터를 num별로 그룹화
    foreach ($rows as $row) {
        $num = $row['num'];
        if (!isset($dataByNum[$num])) {
            $dataByNum[$num] = [
                'orderlist' => []
            ];
        }
        $dataByNum[$num]['orderlist'] = json_decode($row['orderlist'], true);
    }

    $updateData = [];

    // num별로 데이터 처리
    foreach ($dataByNum as $num => $lists) {
        $newOrderlist = [];

        foreach ($lists['orderlist'] as $item) {
            $newItem = $item;
            $tempCol14 = isset($item['col14']) ? $item['col14'] : '';
            $tempCol15 = isset($item['col15']) ? $item['col15'] : '';

            $newItem['col15'] = $tempCol14;
            $newItem['col16'] = $tempCol15;

            $newOrderlist[] = $newItem;
        }

        $updateData[$num] = [
            'orderlist' => json_encode($newOrderlist, JSON_UNESCAPED_UNICODE)
        ];
    }

 

이해하기 쉽게 각 단계별로 설명해드리겠습니다.

데이터 조회 후 그룹화
먼저, 데이터베이스에서 조회된 데이터를 num 값에 따라 그룹화하는 과정입니다.

// 데이터를 num별로 그룹화
foreach ($rows as $row) {
    $num = $row['num']; // 각 행의 'num' 값을 가져옵니다.
    if (!isset($dataByNum[$num])) {
        // 'num' 값이 아직 배열에 없다면 새로 추가합니다.
        $dataByNum[$num] = [
            'orderlist' => []
        ];
    }
    // 'orderlist' 컬럼의 JSON 데이터를 디코딩하여 배열로 저장합니다.
    $dataByNum[$num]['orderlist'] = json_decode($row['orderlist'], true);
}

$updateData = [];

// num별로 데이터 처리
foreach ($dataByNum as $num => $lists) {
    $newOrderlist = [];

    foreach ($lists['orderlist'] as $item) {
        $newItem = $item; // 현재 아이템을 복사합니다.
        $tempCol14 = isset($item['col14']) ? $item['col14'] : ''; // 'col14' 값을 임시 변수에 저장합니다.
        $tempCol15 = isset($item['col15']) ? $item['col15'] : ''; // 'col15' 값을 임시 변수에 저장합니다.

        $newItem['col15'] = $tempCol14; // 'col15' 값을 'col14' 값으로 변경합니다.
        $newItem['col16'] = $tempCol15; // 'col16' 값을 'col15' 값으로 변경합니다.

        $newOrderlist[] = $newItem; // 수정된 아이템을 새로운 리스트에 추가합니다.
    }

    $updateData[$num] = [
        'orderlist' => json_encode($newOrderlist, JSON_UNESCAPED_UNICODE) // 새로운 리스트를 JSON 형식으로 변환하여 저장합니다.
    ];
}


이 부분을 이해하려면:
$rows 배열: 데이터베이스에서 조회된 여러 행의 데이터를 가지고 있습니다.
foreach ($rows as $row): 각 행을 $row 변수에 하나씩 저장하며 반복합니다.
$num = $row['num']: 현재 행의 num 값을 $num 변수에 저장합니다.
if (!isset($dataByNum[$num])): num 값을 키로 하는 배열이 아직 존재하지 않으면 새로 만듭니다.
$dataByNum[$num]['orderlist'] = json_decode($row['orderlist'], true);: orderlist 컬럼의 JSON 형식 데이터를 배열로 변환하여 저장합니다.
데이터 처리 및 수정
다음으로, 그룹화된 데이터를 처리하여 col14 값을 col15로, col15 값을 col16으로 이동시키는 과정입니다.

$updateData = [];

// num별로 데이터 처리
foreach ($dataByNum as $num => $lists) {
    $newOrderlist = [];

    foreach ($lists['orderlist'] as $item) {
        $newItem = $item; // 현재 아이템을 복사합니다.
        $tempCol14 = isset($item['col14']) ? $item['col14'] : ''; // 'col14' 값을 임시 변수에 저장합니다.
        $tempCol15 = isset($item['col15']) ? $item['col15'] : ''; // 'col15' 값을 임시 변수에 저장합니다.

        $newItem['col15'] = $tempCol14; // 'col15' 값을 'col14' 값으로 변경합니다.
        $newItem['col16'] = $tempCol15; // 'col16' 값을 'col15' 값으로 변경합니다.

        $newOrderlist[] = $newItem; // 수정된 아이템을 새로운 리스트에 추가합니다.
    }

    $updateData[$num] = [
        'orderlist' => json_encode($newOrderlist, JSON_UNESCAPED_UNICODE) // 새로운 리스트를 JSON 형식으로 변환하여 저장합니다.
    ];
}


이 부분을 이해하려면:
$updateData 배열: 업데이트할 데이터를 저장할 배열입니다.
foreach ($dataByNum as $num => $lists): 각 num 그룹에 대해 반복합니다.
$newOrderlist 배열: 새로운 orderlist 데이터를 저장할 배열입니다.
foreach ($lists['orderlist'] as $item): 각 orderlist 아이템에 대해 반복합니다.
$newItem = $item: 현재 아이템을 새로운 변수에 복사합니다.
$tempCol14, $tempCol15: 각각 col14와 col15 값을 임시로 저장합니다.
$newItem['col15'] = $tempCol14: col15 값을 col14 값으로 변경합니다.
$newItem['col16'] = $tempCol15: col16 값을 col15 값으로 변경합니다.
$newOrderlist[] = $newItem: 수정된 아이템을 새로운 리스트에 추가합니다.
$updateData[$num] = ['orderlist' => json_encode($newOrderlist, JSON_UNESCAPED_UNICODE)]: 새로운 리스트를 JSON 형식으로 변환하여 updateData 배열에 저장합니다.
이 과정을 통해 orderlist의 col14 값이 col15로, col15 값이 col16으로 이동된 새로운 데이터가 준비됩니다. 준비된 데이터를 이후 데이터베이스에 업데이트합니다.

반응형
댓글