通过匹配子字符串将字符串拆分为嵌套数组

时间:2012-12-06 23:11:07

标签: php arrays string

我需要将字符串拆分为嵌套数组,如thisactual data

的小子集
  • 没有固定的尺寸,代码可以是aaa100bbbbbbbb100
  • 没有固定的字符可以拆分

类似的问题是转换file path to array,但我没有像/那样拆分。

用例:

产品导入数千种产品。每个产品代码都由以下内容组成:

xxx product type
yyy size
zzz colour

因此,您有xxxxxxxxyyxxxxzzxxxxyyzz等代码。

AAA100B // product type AAA with size 100 and colour blue
AAA200B // product type AAA with size 200 and colour blue
AAA100G // product type AAA with size 100 and colour green
BBB100B // product type BBB with size 100 and colour blue

有些没有颜色,有些则没有颜色。可能有些人不会有'匹配'而只是一个单独的代码。

修改

最后一个字符(或两个)通常是一种颜色。颜色可以是以下任何一种。 (颜色代码永远不会在除字符串结尾之外的任何地方)

BK, GY
B, G, O, P, R, S
如果数字的格式为00-00长度/宽度,则

数字被假定为大小,否则为单个大小00

修改

问题粗略开始,实际上存在(扩展和合并是框架的一部分所以只是在那里攻击它们)http://codepad.viper-7.com/Wp19g2

1 个答案:

答案 0 :(得分:0)

嗯,我想明显的(但效率有点低)的方法是拿你的代码字符串,遍历字母,直到你到达一个数字(记录所有字母到那一点作为你的产品类型),当你到达一个数字记录该值和它后面的每个数字,直到你再次到达一个字母,然后开始记录颜色。当然,这假定颜色和产品类型不包括数字!

$product_size = ""; $product_type = ""; $product_color = "";
for ($i = 0; $i < strlen ( $code ); $i++ ) {
     if ( !is_numeric ( $code [ $i ] ) ) { 
          if ( $product_size == "" ) $product_type .= $code [ $i ];
          else $product_color .= $code [ $i ]
     } else $product_size .= $code [ $i ];
}

它是一个很好的设计选择,但有一个分隔符。我的解决方案的一个问题是,如果没有产品尺寸,那么它将永远不会记录颜色。