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
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+
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.