2

我在将不同的数组值与其他数组键匹配时遇到问题。这是我的数组:

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

提前致谢!

4

2 回答 2

1

最好的办法是在将数据结构提供给 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;
});

然后你会在模板上设置$forSmartyasCARIMGS并像这样循环(不确定我是否对数组元素/对象属性有正确的符号语法,所以根据需要进行调整):

{foreach from=$CARIMGS item=carimg}     
      {$carimg.position} - ${carimg.img} - ${carimg.thumb}<br />      
{/foreach}
于 2013-08-16T19:18:10.623 回答
0

您可以像这里一样将数组压缩在一起:Is there a php function like 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 行代码即可准备好一切。希望能帮助到你。

于 2013-08-16T19:32:38.730 回答