<?php $str = "{黄色}{绿色}{红色}@{大号}{中号}{小号}@{男款}{女款}{儿童}"; $array1 = explode("@", $str); $array = array(); foreach ($array1 as $row) { $_array = array(); //preg_match_all('/\{(.*?)\}/', $row, $_array); //preg_match_all('/\{(.*?)\}/', $row, $_array); preg_match_all('/{(.*?)}/',$row, $_array); //重复0次或者一次 //前面是{字符, //.* 表示匹配任意数量的字符 //?重复0次或者一次 // /{(.*?)}/ 以‘{’开始中间以任意数量的字符出现一次或0次, 以'}'结束 //var_dump($_array); //echo "<BR>===============<BR>"; $array[] = $_array[1]; $_array = null; } var_dump($array); echo "<BR><BR><BR>"; function my($array) { //$array是数组 count($array) = 3; return my2($array, count($array)); } function my2($array, $count, $start = 0) { static $_array = array(); static $_row = array(); //$array[$start] //相当于循环一数属性 //循环第一数属性 //$array[0] = [0]=> string(6) "黄色" [1]=> string(6) "绿色" [2]=> string(6) "红色" //$array[1] = [0]=> string(6) "大号" [1]=> string(6) "中号" [2]=> string(6) "小号" //$array[2] = [0]=> string(6) "男款" [1]=> string(6) "女款" [2]=> string(6) "儿童" var_dump($_row); echo "<BR><BR>====================================<BR>"; foreach ($array[$start] as $row) { $_row[$start] = $row; //$row[0] = ‘黄芭’ $row[1] = '中号'; $row[2]='儿童' if ($start == $count - 1) //已经到最后一组了 { $_array[] = $_row; //直接加上去 //放入到$_array数组中 } else { my2($array, $count, $start + 1); //开始读取第二组属性 开始读取第三组属性 } } return $_array; } $array = my($array); foreach($array as $buf){ var_dump($buf); echo "<BR><BR><BR>"; } //print_r(my($array)); ?>