如何根据存储的值过滤数组?

时间:2018-09-14 04:01:26

标签: php arrays

我想根据存储的字符串过滤数组。

array:3 [
  0 => "TEST_TEST1_ABC_20180920000000.txt"
  1 => "TEST_TEST2_ABC_20180920000000.txt"
  2 => "TEST_TEST1_EFG_20180920000000.txt"
 ]
//String format -> type_uniqueCode_outletCode_datetime.txt

TEST1和TEST2是每个用户的唯一标识。每个用户可能有多个具有唯一出口代码的出口,但可能与其他用户相同。

如果选择TEST1,则预期结果如下

array:2 [
  0 => "TEST_TEST1_ABC_20180920000000.txt"
  1 => "TEST_TEST1_EFG_20180920000000.txt"
 ]

我该怎么做?是否可以进行条件检查以了解每个用户的插座是否已附加正确的唯一代码?

1 个答案:

答案 0 :(得分:3)

您可以使用array_filter将数组的每个元素与测试字符串进行比较,例如

$array = [
  0 => "TEST_TEST1_ABC_20180920000000.txt",
  1 => "TEST_TEST2_ABC_20180920000000.txt",
  2 => "TEST_TEST1_EFG_20180920000000.txt"
];

$test = 'TEST1';
$newarr = array_filter($array, function ($v) use ($test) { return preg_match('/^[^_]+_' . preg_quote($test) . '_/', $v); });
print_r($newarr);

输出:

Array
(
    [0] => TEST_TEST1_ABC_20180920000000.txt
    [2] => TEST_TEST1_EFG_20180920000000.txt
)

我使用了preg_match,以便该字段的type部分可以具有任意长度。您还可以通过在正则表达式中添加i修饰符来使搜索不区分大小写:

$newarr = array_filter($array, function ($v) use ($test) { return preg_match('/^[^_]+_' . preg_quote($test) . '_/i', $v); });

最后,如果您想为数组0,1,...编制索引,只需使用array_values

print_r(array_values($newarr))

输出:

Array
(
    [0] => TEST_TEST1_ABC_20180920000000.txt
    [1] => TEST_TEST1_EFG_20180920000000.txt
)