帝国cms中,多值字段通过explode函数可以转化为数组,下面就图片模型中的多值字段示范一下转化和归类。
模拟一个多值字段的值
$navinfor['morepic']="/testdata/demopic/photo/shq/s1.jpg::::::/testdata/demopic/photo/shq/1.jpg::::::很好"; $navinfor['morepic'].=PHP_EOL."/testdata/demopic/photo/shq/s2.jpg::::::/testdata/demopic/photo/shq/2.jpg::::::不好"; $navinfor['morepic'].=PHP_EOL."/testdata/demopic/photo/shq/s3.jpg::::::/testdata/demopic/photo/shq/3.jpg::::::很好";
实际上数据表中,多值字段的多值,就是通过换行(通过帝国内置函数egetzy('rn')来取得)来间隔的,而
::::::
则是第二分隔符。用来区分每个多值中的多值。
2.转化为数组
$newarr = explode(egetzy('rn'),$navinfor['morepic']);
3.遍历这个数组,并使用第二分隔符继续分隔,最后的结果为多维数组
$tur=array(); foreach($newarr as $i=>$v)list($tur[$i]['smallpic'],$tur[$i]['bigpic'],$tur[$i]['say'])= explode("::::::", $v);
4.归类,根据图片说明say,对数组中的元素进行归类
$result = array(); foreach($tur as $k=>$v){ $key = $v['say']; if(!array_key_exists($key, $result)) $result[$key] =array(); $result[$key][]= $v; } print_r($result);
5.结果为
(
[很好] => Array
(
[0] => Array
(
[say] => 很好
[bigpic] => /testdata/demopic/photo/shq/1.jpg
[smallpic] => /testdata/demopic/photo/shq/s1.jpg
)
[1] => Array
(
[say] => 很好
[bigpic] => /testdata/demopic/photo/shq/3.jpg
[smallpic] => /testdata/demopic/photo/shq/s3.jpg
)
)
[不好] => Array
(
[0] => Array
(
[say] => 不好
[bigpic] => /testdata/demopic/photo/shq/2.jpg
[smallpic] => /testdata/demopic/photo/shq/s2.jpg
)
)
)
至此,整理完成,遍历新的数组
$result
就可以实现根据图片说明归类输出了。