duannian7116 2011-05-22 23:06
浏览 96
已采纳

按作者的名称对数组中的项进行聚类

I have an Array like this:

[1] "John", "content1"
[2] "John", "content2"
[3] "John", "content3"
[4] "Jim", "content"
[5] "Joana", "content1"
[6] "Joana", "content2"

I attempted to have an output like this:

<ul>

 <li>John
  <ul>
   <li> content 1 </li>
   <li> content 2 </li>
   <li> content 3 </li>
  </ul>
 </li>

 <li>Jim
  <ul>
   <li> content </li>
  </ul>
 </li>

 <li>Joana
  <ul>
   <li> content 1 </li>
   <li> content 2 </li>
  </ul>
 </li>

</ul>

I tried solving it using a foreach-iteration, but it doesn't work out at all: (note: $cur_name means the author's name whereas $content means the content)

 foreach($array as $a) { 
              $cur_name = $a['name'];
    if ($old_name != $cur_name && $cur_name !="")$return .= "<li>";
    if ($old_name != $cur_name && $cur_name !="") {
        $return .= "<strong>$cur_name</strong><br />";
    }
    elseif($cur_name == "") {
    }
    elseif ($old_name == $cur_name) {
    }
    $return .= "$content<br />";
    if ($old_name != $cur_name && $cur_name !="") $return .= "</li>";

    $old_name = $cur_name;

    }
}

Any ideas highliy appreciated..

  • 写回答

3条回答 默认 最新

  • doudi7782 2011-05-22 23:28
    关注

    Use this code:

    Do something like this:

    • iterate your array and create another key-ed array (say $processedArray) where key value taken from 1st index on each array
    • on each iteration, add 2st index to it's appropriate 1st key.
    • after that, iterate this $processedArray to output it appropriately.

    I know reading code would be easier, so, try this one:

    <?php
    $data = array(
        array('name'=>'John', 'content'=>'Content1'),
        array('name'=>'John', 'content'=>'Content2'),
        array('name'=>'John', 'content'=>'Content3'),
        array('name'=>'Jim', 'content'=>'Content'),
        array('name'=>'Joana', 'content'=>'Content1'),
        array('name'=>'Joana', 'content'=>'Content2'),
    );
    
    $processedArray = array();
    
    foreach( $data as $each )
    {
        if( !isset( $processedArray[ $each[ 'name' ] ] ))
            $processedArray[ $each[ 'name' ] ] = array();
        $processedArray[ $each[ 'name' ] ][] = $each[ 'content' ];
    }
    
    echo "<ul>
    ";
    
    foreach( $processedArray as $key => $arrVal)
    {
        echo "  <li>$key
    ";
        echo "    <ul>
    ";
        foreach( $arrVal as $value )
        {
            echo "      <li>$value</li>
    ";
        }
        echo "    </ul>
    ";
        echo "  </li>
    ";
    }
    echo "</ul>
    ";
    ?>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)