【问题标题】:Replace the field替换字段
【发布时间】:2022-01-02 05:56:48
【问题描述】:

我正在使用以下代码:

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;
}

代替:12岁玩具--->12+

我需要将确切的文本映射('Toys for 12 years old')更改为字段是否包含 ('12 years')

例如: 如果该字段包含 12 年,则写 12+;如果该字段包含 7 年,则写 7+。如果没有找到,请留空

谢谢

【问题讨论】:

  • 为什么要删除上一个问题?你可以用(\d+)\h+years?$1+preg_replace(\d+)\h+years? 然后你不需要列出每年的整数

标签: php wpallimport


【解决方案1】:

准确匹配单词

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+

用年份[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.

【讨论】:

  • 我试过了,效果很好。谢谢你。我还有一个问题。如果文本“12 岁的玩具”不同怎么办。例如“为 12 岁购买玩具”、“为 12 岁使用过的玩具”。但最后总是包含“12年”。
  • @MichalKovalčík 更新了我的答案以支持任何包含数字并后跟年份的字符串。
  • 我是否需要为“为 12 岁购买玩具”提供任何可能的组合(通过 echo my_map_field)。因为我不知道所有可能的句子,所以我只知道“12 年”是可用的。它更像是搜索'12年' ...返回12+,搜索'15年' ...返回15+
  • 您可以复制该代码以尝试使用您想要的任何句子。如果您在 $map 数组中没有任何相关内容,则搜索 15 年返回空。它不返回 15+ 而是空字符串。
  • @MichalKovalčík 在preg_match() 中,这个模式/(\d+)\s*year[s]?/i 表示匹配任意数字((\d+)),并可能后跟0 个空格或更多(\s*),然后跟单词year (year) 带或不带 s ([s]?)。最后的i 表示不区分大小写。可以是 12 年或 12 年。
猜你喜欢
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 2020-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-05
相关资源
最近更新 更多