首页 > 解决方案 > 如何从 PHP 中的数组中获取相关项的第一个子集?

问题描述

我有一个文件名数组,例如:

D-CGRS_SS-2000_BLUE.jpg
D-CGRS_SS-2000_GREEN.jpg
D-CGRS_SS-2000_LIME.jpg
D-CGRS_SS-2000_NAVY.jpg
D-CGRS_SS-2000_RED.jpg
D-CGRS_SS-2000_WHITE.jpg
D-CGRS_SS-2000_YELLOW.jpg
D-CGRS_SS-2001_BLUE.jpg
D-CGRS_SS-2001_GREEN.jpg
D-CGRS_SS-2001_LIME.jpg
D-CGRS_SS-2001_NAVY.jpg
D-CGRS_SS-2001_RED.jpg
D-CGRS_SS-2001_WHITE.jpg
D-CGRS_SS-2001_YELLOW.jpg
D-CGRS_SS-2002_BLUE.jpg
D-CGRS_SS-2002_GREEN.jpg
D-CGRS_SS-2002_LIME.jpg
D-CGRS_SS-2002_NAVY.jpg
D-CGRS_SS-2002_RED.jpg
D-CGRS_SS-2002_WHITE.jpg
D-CGRS_SS-2002_YELLOW.jpg
D-CGRS_SS-2003_BLUE.jpg
D-CGRS_SS-2003_GREEN.jpg
D-CGRS_SS-2003_LIME.jpg
D-CGRS_SS-2003_NAVY.jpg
D-CGRS_SS-2003_RED.jpg
D-CGRS_SS-2003_WHITE.jpg
D-CGRS_SS-2003_YELLOW.jpg
.
.
.

将此列表缩减为仅前七个项目的最佳方法是什么?那些都有相同的“SS”编号(SS-2000)?所以结果数组就是:

D-CGRS_SS-2000_BLUE.jpg
D-CGRS_SS-2000_GREEN.jpg
D-CGRS_SS-2000_LIME.jpg
D-CGRS_SS-2000_NAVY.jpg
D-CGRS_SS-2000_RED.jpg
D-CGRS_SS-2000_WHITE.jpg
D-CGRS_SS-2000_YELLOW.jpg

编辑:

谢谢你的回复。但是,在发布之前,我应该更清楚地了解我的请求。我很抱歉。以下是一些额外的限制:

SS-2000部分并不总是SS-2000。在某些目录中,该系列以SS-1900orSS-1806或其他开头。

另外,我不能保证每组总是有 7 个。有些可能有 3 个或 12 个或其他。

最后,我不能保证前两位数字会是SS,但它SSHANH

经过一夜好眠并阅读您的回复,我可能想出了一个主意:我可能想在数组中的第一个元素上使用preg_match查找模式/(SS|HA|NH)-\d{4}/,然后将$matches[0]结果用作preg_grep数组上的模式。(如果可以的话,请随意回复 RegEx 模式的简化。)

标签: phparrays

解决方案


如果前 7 个项目的意思是获取具有此前缀的图像D-CGRS_SS-2000并且数组中的位置无关紧要,则可以使用模式来匹配那些从字符串开头^到结尾$匹配并匹配颜色的名称[A-Z]+用于大写字符的名称。

例如,如果您的文件名数组是$filenames,则一种选择是使用preg_grep

$filteredFilenames = preg_grep("~^D-CGRS_SS-2000_[A-Z]+\.jpg$~", $filenames);
print_r($filteredFilenames);

结果

Array
(
    [0] => D-CGRS_SS-2000_BLUE.jpg
    [1] => D-CGRS_SS-2000_GREEN.jpg
    [2] => D-CGRS_SS-2000_LIME.jpg
    [3] => D-CGRS_SS-2000_NAVY.jpg
    [4] => D-CGRS_SS-2000_RED.jpg
    [5] => D-CGRS_SS-2000_WHITE.jpg
    [6] => D-CGRS_SS-2000_YELLOW.jpg
)

php演示


推荐阅读