2013-03-06 98 views
0

我有一个多维数组的信息集,像这样:多维数组 - 我怎样才能得到这个功能?

$slides = array (
    array (
     'link' => 'page.php', 
     'image' => 'image1.jpg', 
     'alt' => 'text for alt' 
    ), 
    array (
     'link' => 'anotherpage.php', 
     'image' => 'image2.jpg', 
     'alt' => 'text for alt' 
    ) 
); 

目前适用于使用:

foreach($slides as $slide => $data){ 
    echo "<a href=\"{$data['link']}\"> 
     <img src=\"{$data['image']}\" alt=\"{$data['alt']}\" /> 
     </a>"; 
} 

现在,我的问题是:如何在世界上我得到这个作为一种功能工作?

function createSlides($slides){ /* foreach loop */ } 

我试过,但我想我误解如何传递数组,因为它是一个语言结构,而不是一个对象。这是我第一次使用多维数组。 此外,我想我可以控制什么$data进入功能参数,即echo createSlides($slides[1,2,4]);。我误解了这个,还是仅仅因为数组没有传入函数?

+2

你试过吗......?阵列传递得很好。我一直这样做。他们唯一不做的就是让你以调用者可以看到的方式修改它们,甚至可以通过引用来修复它们。 – cHao 2013-03-06 17:21:40

+0

我不知道什么改变了,但现在确实有效。如何控制'$ data',我怎么能做到这一点? 'echo sliderContent($ slides [1,2]);'破坏代码。 – 2013-03-06 17:28:08

+1

当然是的。 PHP不会像这样做切片。 :P你需要调用一些函数,只返回你想要的东西。 – cHao 2013-03-06 17:29:13

回答

1

我不知道,如果你问这一点,但就像一个正常的参数:

function createSlides($slides){ 
    foreach($slides as $slide => $data){ 
     echo "<a href=\"{$data['link']}\"> 
      <img src=\"{$data['image']}\" alt=\"{$data['alt']}\" /> 
     </a>"; 
    } 
} 

createSlides($slides); 
+2

对于问题的第二部分,您可以传递第二个参数,例如'function createSlides($ slides,$ filter = array()){...}',然后简单地将这一行放在循环之前:if !$ empty($ filter)$ slides = array_diff_key($ slides,$ filter);' - 所以现在你可以传递你想要打印的一堆索引:'createSlides($ slides,array(0,2)); '只打印第一张和第三张幻灯片。 – Quasdunk 2013-03-06 17:38:53

+0

我喜欢这种情况下的方法,可以根据需要进行配置。 @Quasdunk谢谢 – 2013-03-06 17:45:14

+0

@yUnoDOWNVOTE不客气。请注意,第二个参数是可选的,您在调用函数时不必传递它。如果未通过/指定(或具有预定义值),则会打印所有幻灯片。这个概念相当于你可能从其他语言如Java或C#中知道的“重载函数”。 ** @史蒂夫:**请随意把这个在你的答案,所以它涵盖了整个问题:) – Quasdunk 2013-03-06 17:48:07