티스토리 뷰

반응형

보통 인치를 표현할때 산업현장에서는 "을 인치로 쓰는데...

이게 json으로 들어가면 어마어마한 .. 반전이 일어납니다.

'ㄹ'키를 누르고 한자를 누르면... '″ ' 마크로 변경해서 꼼수로 사용하고 있어요.

쌍따옴표 둘러쌓인 제이슨에서 골치아픈 일입니다. 우리가 " 부호를 자주 사용할때가 있지요.

josn 은 기본적으로 "안의 값을 넣는데, 그 안에 6" 6인치 이런식으로 된 것때문에 엉망이 되지요.

function generateItemCodeForAccessory($accessoryItem) {
    $code = strtolower(isset($accessoryItem['col1']) ? $accessoryItem['col1'] : '');
    // 디버그 코드 추가
    if (empty($code)) {
        print 'Invalid accessory item: ';
        var_dump($accessoryItem);
    }
    return $code;
}

위의 코드에서 따옴표 "를 특수문자  ″로 변경하는 코드를 넣어줘. 그래야 오류를 방지해야 합니다.

주어진 코드에서 따옴표 "를 특수문자 ″로 변경하는 코드를 추가하려면, str_replace 함수를 사용할 수 있습니다. 이 함수는 문자열 내에서 특정 문자열을 다른 문자열로 대체할 수 있습니다.

다음은 generateItemCodeForAccessory 함수에 따옴표 "를 특수문자 ″로 변경하는 코드를 추가한 예제입니다:

function generateItemCodeForAccessory($accessoryItem) {
    // 모든 문자열 값에서 "을 ″로 변환
    $accessoryItem = array_map(function($value) {
        return is_string($value) ? str_replace('"', '″', $value) : $value;
    }, $accessoryItem);

    $code = strtolower(isset($accessoryItem['col1']) ? $accessoryItem['col1'] : '');
    
    // 디버그 코드 추가
    if (empty($code)) {
        print 'Invalid accessory item: ';
        var_dump($accessoryItem);
    }
    return $code;
}
이 코드는 다음과 같이 작동합니다:

array_map 함수를 사용하여 $accessoryItem 배열의 모든 값을 순회합니다.
각 값이 문자열인 경우 str_replace 함수를 사용하여 모든 따옴표 "를 특수문자 ″로 대체합니다.
변환된 $accessoryItem 배열을 사용하여 원래 코드를 계속 실행합니다.
아래의 코드에도 위의 변환 과정이 필요하다.

    $stmh_fee_sub = $pdo->query($sql_fee_sub);
    while ($row = $stmh_fee_sub->fetch(PDO::FETCH_ASSOC)) {
        $items_array = array_filter(safe_json_decode($row['item']), 'strlen'); // 빈 값 제거
        
        foreach ($items_array as $item) {
            $generated_code = generateItemCodeForAccessory([
                'col1' => $item
            ]);
            if (!empty($generated_code)) {
                $items[$generated_code] = $generated_code;
            }
        }
    }


아래의 코드에 따옴표 "를 특수문자 ″로 변경하는 과정을 추가하려면, generateItemCodeForAccessory 함수와 함께 str_replace 함수를 사용하여 items_array의 각 항목을 변환할 수 있습니다.

다음은 변환 과정을 추가한 코드입니다:

$stmh_fee_sub = $pdo->query($sql_fee_sub);
while ($row = $stmh_fee_sub->fetch(PDO::FETCH_ASSOC)) {
    $items_array = array_filter(safe_json_decode($row['item']), 'strlen'); // 빈 값 제거
    
    foreach ($items_array as $item) {
        // "를 ″로 변환
        $item = str_replace('"', '″', $item);
        
        $generated_code = generateItemCodeForAccessory([
            'col1' => $item
        ]);
        if (!empty($generated_code)) {
            $items[$generated_code] = $generated_code;
        }
    }
}

$stmh_fee_sub = $pdo->query($sql_fee_sub);
while ($row = $stmh_fee_sub->fetch(PDO::FETCH_ASSOC)) {
    $items_array = array_filter(safe_json_decode($row['item']), 'strlen'); // 빈 값 제거
    
    foreach ($items_array as $item) {
        // "를 ″로 변환
        $item = str_replace('"', '″', $item);
        
        $generated_code = generateItemCodeForAccessory([
            'col1' => $item
        ]);
        if (!empty($generated_code)) {
            $items[$generated_code] = $generated_code;
        }
    }
}


이 코드는 다음과 같이 작동합니다:

safe_json_decode 함수로 디코딩한 items_array 배열의 각 항목을 순회합니다.
각 항목의 문자열에서 str_replace 함수를 사용하여 따옴표 "를 특수문자 ″로 대체합니다.
변환된 항목을 generateItemCodeForAccessory 함수에 전달합니다.
생성된 코드가 비어 있지 않으면, items 배열에 추가합니다.

" 쌍따옴표와 전쟁...

이걸 이겨야 합니다. 그래야 제이슨과 친해질 수 있어요~

반응형
댓글