Smarty/PHP-如何在3个不同的数组之间匹配键


Smarty/PHP - How to match up keys between 3 different arrays?

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

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行代码即可准备所有内容。希望能有所帮助。