PHP:如何使用二维数组来显示菜单?

时间:2015-05-05 20:16:13

标签: php arrays multidimensional-array

我认为我很好地接受了这个,但我只是坚持这一点。我想使用数组和foreach循环显示此菜单:

<a href="/design/payments"><img src="/img/page-icons/credit-card21.png" />Payments</a>
<a target="_blank" href="/cloud"><img src="/img/page-icons/upload123.png" />Cloud</a>
<a target="_blank" href="/portal"><img src="/img/page-icons/earth208.png" />Portal</a>

为此,我需要在PHP中将其转换为这一行:

echo '<a href="' . $link . '" target="' . $target . '"><img src="/img/page-icons/' . $image . '" />' . $title . '</a>';

要在循环中填写,我们需要创建这样的东西......这就是我被困住的地方:

foreach( $stamp as $link => $target ){
    echo '<a href="/' . $link . '" target="' . $target . '">';

    foreach( $stamp[] as $title => $image ){
        echo '<img src="/img/page-icons/' . $image . '" />' . $title;
    }

    echo '</a>';
}

我真的不知道如何解决上述问题,今天只是搞乱了一段时间。我也不想总是在每个链接上显示target="' . $target . '"

数组可能是二维数组?这样的事情:

$stamp = array(
    'link' => array('title' => 'image'),
    'link' => array('title' => 'image'),
    'link' => array('title' => 'image')
);

编辑:

对于'目标'是什么有一些混淆,我想将数组中的4个值回显到链接中,目标是其中一个值。我不知道如何在数组中使用它,所以我把它留了出来。

2 个答案:

答案 0 :(得分:2)

当你这样做时:

foreach( $stamp as $link => $target )

$link变量包含字符串“ link ”,$target变量是一个数组,例如['title' => 'image']

你应该做的是拥有这样的数组:

// Init links
$links = array();

// Add links
$links[] = array(
   'title' => 'My Title',
   'href' => 'http://www.google.com',
   'target' => '_blank',
   'image' => 'image.png',
);

foreach ($links as $link)
{
   echo '<a href="'.$link['href'].'" target="'.$link['target'].'">';
       echo '<img src="/img/page-icons/' . $link['image'] . '" />';
       echo $link['title']; 
   echo '</a>';
}

这是一种更灵活的方法,允许您将来向结构添加其他数据项。如果您有不同的数据源(如数据库),则可以在循环中轻松生成$links数组。

修改

要回答您的进一步问题,您可以在链接构建前添加一组理智的默认值,如下所示:

foreach ($links as $link)
{
   // Use the ternary operator to specify a default if empty
   $href = empty($link['href']) ? '#' : $link['href'];
   $target = empty($link['target']) ? '_self' : $link['target'];
   $image = empty($link['image']) ? 'no-icon.png' : $link['image'];
   $title = empty($link['title']) ? 'Untitled' : $link['title'];

   // Write link
   echo "<a href='$href' target='$target'>";
       echo "<img src='/img/page-icons/$image' />";
       echo $title; 
   echo "</a>";
}

答案 1 :(得分:0)

您可以将数组设置为:

$stamp = array(
 '0' => array('title'=>$title 'image'=>$image,'link'=>$link,'target'=>$target),
 '1' => array('title'=>$title, 'image'=>$image,'link'=>$link,,'target'=>$target),
 '2' => array('title'=>$title 'image'=>$image,'link'=>$link,'target'=>$target)
);

在foreach中你可以写

$i=0;
foreach( $stamp as $st=> $target ){
echo '<a href="/' . $st['link'] . '" target="' . $st['target'] . '">';


    echo '<img src="/img/page-icons/' . $st['image'] . '" />' . $st['title'];


echo '</a>';

}