Search code examples
phpwpallimport

Replace the field


I am using the following code:

function my_map_field( $data ) {
    $map = array(
        'Toys for 12 years old' => '12+',
        'Toys for 4 years old' => '4+',
        'Toys for 7 years old' => '7+',
        'Toys for 9 years old' => '9+',
    );
    return isset( $map[$data] ) ? $map[$data] : null;
}

It replaces: Toy for 12 years old ---> 12+

I need to change the exact text mapping ('Toys for 12 years old') to if the field contains ('12 years')

for example: if the field contains 12 years write 12+; if the field contains 7 years write 7+. If nothing is found, leave empty

Thanks


Solution

  • Match exact word

    function my_map_field( $data ) {
        $map = array(
            'Toys for 12 years old' => '12+',
            'Toys for 4 years old' => '4+',
            'Toys for 7 years old' => '7+',
            'Toys for 9 years old' => '9+',
        );
    
        foreach ($map as $text => $number) {
            if (stripos($text, $data) !== false) {
                return $map[$text];
            }
        }
        return '';
    }
    
    echo my_map_field('7 years');// result is 7+
    echo my_map_field('11 years');// result is empty
    echo my_map_field('12 years');// result is 12+
    

    Match any number with year[s]

    function my_map_field( $data ) {
        $map = array(
            'Toys for 12 years old' => '12+',
            'Toys for 4 years old' => '4+',
            'Toys for 7 years old' => '7+',
            'Toys for 9 years old' => '9+',
        );
    
        preg_match('/(\d+)\s*year[s]?/i', $data, $matches);
        $matchNumber = ($matches[1] ?? '');
    
        foreach ($map as $text => $number) {
            if (stripos($text, $matchNumber) !== false) {
                return $map[$text];
            }
        }
        return '';
    }
    
    echo my_map_field('buy toys for 12 years old');// get 12+
    echo my_map_field('used toys for 12 years old');// get 12+
    echo my_map_field('buy toys for 15 years old');// get empty.