使用给定文件夹中的文件名设置此数组。我的文件名将采用以下格式:
style1_color1_product1_0000.png
style1_color1_product2_0001.png
style1_color1_product3_0002.png
style1_color2_product1_0003.png
style1_color2_product2_0004.png
style2_color1_product1_0005.png
不会复制任何文件名,每种样式和颜色总会有多个产品。
我要做的是采用这个数组并根据匹配的“样式”和“颜色”值将其拆分为新数组。
我已经打开文件并根据第一个和第二个名称拆分新数组了,但我找不到分组到新数组的答案。
$Dir = "products";
$files = scandir($Dir);
array_multisort($files, SORT_STRING);
for ($key = 0, $size = count($files); $key < $size; $key++) {
if ($files[$key] != '.' && $files[$key] != '..'){
$new_array[] = explode('_', $files[$key], 3);
}
}
print_r($new_array);
Array ( [0] =>
Array ( [0] => style1 [1] => color1 [2] => product1_0000.png ) [1] =>
Array ( [0] => style1 [1] => color1 [2] => product2_0001.png ) [2] =>
Array ( [0] => style1 [1] => color1 [2] => product2_0002.png ) [3] => )
)
etc
现在我需要与原始数组进行比较和分割。
任何帮助都将不胜感激。
答案 0 :(得分:1)
使用简单的正则表达式可以简化您的代码:
$files = glob($Dir."/*.png");
$results = array();
foreach($files as $file) {
if( preg_match("/style(?<style>\d+)_color(?<color>\d+)_product(?<product>\d+)_(?<id>\d+)\.png/",$file,$match) {
// you now have $match['style'], $match['color'], $match['product']
// and $match['id'] for the parts of the filename,
// and $match[0] for the whole thing
if( !isset($results[$match['style']])) $results[$match['style']] = array();
if( !isset($results[$match['style']][$match['color']])) $results[$match['style']][$match['color']] = array();
$results[$match['style']][$match['color']][$match['product']] = $match['id'];
}
}
var_dump($results);
答案 1 :(得分:0)
检查这是否适合您:
<?php
$files = array(
'style1_color1_product1_0000.png',
'style1_color1_product2_0001.png',
'style1_color1_product3_0002.png',
'style1_color2_product1_0003.png',
'style1_color2_product2_0004.png',
'style2_color1_product1_0005.png'
);
array_multisort(
$files,
SORT_STRING
);
$newArr = array();
foreach ($files as $file) {
$combined = array_combine(
array(
'style',
'color',
'product'
),
explode(
'_',
$file,
3
)
);
$newArr[$combined['style']][$combined['color']][] = $combined['product'];
}
结果:
Array
(
[style1] => Array
(
[color1] => Array
(
[0] => product1_0000.png
[1] => product2_0001.png
[2] => product3_0002.png
)
[color2] => Array
(
[0] => product1_0003.png
[1] => product2_0004.png
)
)
[style2] => Array
(
[color1] => Array
(
[0] => product1_0005.png
)
)
)