如何在PHP中使用不同格式的preg_grep特定数字?

时间:2019-04-11 06:36:14

标签: php arrays

我有一个参考号数组,其中包含一个点,一个破折号和一个带点,破折号的参考号搜索字符串。

现在,我想检索匹配键,以便检索其原始状态的数字。

正在寻找参考编号:21230412003001

内部数组:

$ref_facetes = Array
(
    [212.30.41.20.03.001] => 8
    [3523.30.00] => 8
    [215.92.46.22.01.003] => 7
)

正则表达式:

'/\/|\./'

尝试对其进行grep:

$key = preg_grep('/\/|\./', $search_para['refid'], $ref_facetes);

为了恢复原始的写作风格:

echo $ref_facetes[$key];

// should return: 212.30.41.20.03.001 

这怎么办?

1 个答案:

答案 0 :(得分:2)

执行此操作的一种方法是创建一个新数组,使用从原始键中剥离的所有非数字字符作为键,并从原始键中剥离的所有值作为值,您可以使用array_combine,{{3 }}和array_map。然后,您可以检查一下搜索字符串是否作为关键字存在,如果存在,则输出值:

$ref_keys = array_combine(array_map(function ($v) { 
    return preg_replace('/[^0-9]/', '', $v);
}, array_keys($ref_facetes)), array_keys($ref_facetes));
echo isset($ref_keys[$search_para['refid']]) ? $ref_keys[$search_para['refid']] : 'not found';

输出:

212.30.41.20.03.001

如果您使用的是PHP7及更高版本,则可以将最后一行替换为

echo $ref_keys[$search_para['refid']] ?? 'not found';

preg_replace