我在将不同的数组值与其他数组键匹配时遇到问题。这是我的阵列:
array(3){
[0]=>array(3){ //image number (mainly used for image display order)
[0]=>string(1)"1"
[1]=>string(1)"2"
[2]=>string(1)"3"
}
[1]=>array(3){ //image link
[0]=>string(8)"img1.jpg"
[1]=>string(8)"img2.jpg"
[2]=>string(8)"img3.jpg"
}
[2]=>array(3){ //thumbnail link
[0]=>string(10)"thumb1.jpg"
[1]=>string(10)"thumb2.jpg"
[2]=>string(10)"thumb3.jpg"
}
}
我正在使用smarty,这是我的代码:
{foreach from=$CARIMGS item=newArr}
{foreach from=$newArr key=index item=item}
{$item} <br>
{/foreach}
{/foreach}
我现在得到的是:
1
2
3
img1.jpg
img2.jpg
img3.jpg
thumb1.jpg
thumb2.jpg
thumb3.jpg
我需要得到这个结果:
1 - img1.jpg - thumb1.jpg
2 - img2.jpg - thumb2.jpg
3 - img3.jpg - thumb3.jpg
提前感谢!
最好的做法是在将数据结构提供给Smarty:之前,以更可用的格式准备数据结构
$forSmarty = array();
// loop over the array with the image link since its the most significant piece of data
// and the other items shouldnt exist without a corresponding image link
foreach($arr[1] as $i => $link) {
$forSmarty[] = array(
'img' => $link,
'thumb' => isset($arr[0][$i]) ? $arr[0][$i] : null,
'position' => isset($arr[2][$i]) ? (int) $arr[2][$i] : 0,
);
}
// lets sort by position
usort($forSmarty, function ($a,$b) {
if ($a['position'] == $b['position']) {
return 0;
}
return ($a['position'] < $b['position']) ? -1 : 1;
});
然后,您可以在Template上将$forSmarty
设置为CARIMGS
,并像这样循环(不确定我是否对数组元素/对象属性有正确的表示法语法,所以根据需要进行调整):
{foreach from=$CARIMGS item=carimg}
{$carimg.position} - ${carimg.img} - ${carimg.thumb}<br />
{/foreach}
您可以像这里一样将数组压缩在一起:是否有类似python';s zip?。
但如果它们的长度相同,这是正确的。
假设您要打印的数组是$list。
然后可以执行$list=array_map(null,$list[0],$list[1],$list[2]);得到你想要的。
如果你想要破折号,你可以这样:
$dashes = array(' - ', ' - ', ' - ');
$list = array_map(null, $list[0], $dashes, $list[1], $dashes, $list[2]);
现在,每行都有一个数组,为了得到一个字符串,你可以映射内爆
$list = array_map(implode, $list);
只需3行代码即可准备所有内容。希望能有所帮助。