如何使用implode创建一个可链接的数组?

时间:2011-09-23 20:34:38

标签: php arrays foreach

我的数组显示正常,但我希望内部的链接显示数组的当前值。

这是我的代码:

foreach( $persons as $pid => $p)
{
    echo '<a href="?tag=">' . implode( '</a>, <a href="?tag=">', $tags[ $p['id'] ])  . '</a>';
    echo '<br /><br />';
}

这就是我要显示的内容:

<a href="?tag=tag1">tag1</a>, <a href="?tag=tag2">tag2</a>

更新 我在其他地方得到了答案。事实证明这很简单。接受答案,这有助于我改进我的代码。

$tags_arr = $tags[$p['id']];    
    foreach($tags_arr as $v){
  $out[] = "<a href='?tag=$v'>$v</a>";
}

2 个答案:

答案 0 :(得分:1)

使用http_build_query - 生成URL编码的查询字符串

语法:string http_build_query(mixed $ query_data [,string $ numeric_prefix [,string $ arg_separator [,int $ enc_type = PHP_QUERY_RFC1738]])

返回URL编码的字符串。

<?php
    $data = array('foo'=>'bar',
                  'baz'=>'boom',
                  'cow'=>'milk',
                  'php'=>'hypertext processor');

    echo http_build_query($data) . "\n";
    echo http_build_query($data, '', '&amp;');

    ?>

以上示例将输出:

富=栏&安培;巴兹=吊杆&安培;牛奶=&安培; PHP超文本= +处理器

富=栏&安培;巴兹=吊杆&安培;牛奶=&安培; PHP超文本= +处理器

答案 1 :(得分:1)

我假设$tags本身就是一个数组,并且您正在尝试为每个$p['id']写出每个标记。如果我说得对,请不要使用implode()。而是使用两个foreach循环。

foreach ($persons as $pid => $p) {
  foreach ($tags as $t) {
    echo "<a href='?tag={$t[$p['id']]}'>{$t[$p['id']]}</a>\n";
  }
}

<强>更新

我在这里看到一些问题:

    $persons[$row['id']]['title'] = $row['title'];
    $persons[$row['id']]['height'] = $row['height'];
    $persons[ $row['id'] ] = array( 'id' => $row['id'], 'tag' => $row['tag']);

在上方,您将titleheight数组键设置为$persons[$row['id']]。在此之后,您使用新的$persons[$row['id']]覆盖整个array()。相反,因为你保持相同的数组键,你可以简单地使用:

$persons[$row['id']] = $row;

现在我认为最严重的问题是:

$tags[ $row['id'] ][] = $row['tag'];

使用[]表示法,您将$row['tag']附加到$tags[ $row['id'] 作为数组元素,而不是将其值设置为标记。这就是你获得Array(1)代替标签值的原因。而是使用:

$tags[$row['id']] = $row['tag'];