帝国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 ( [很好] => 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 就可以实现根据图片说明归类输出了。
|