首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP创建具有不同排序字段的数组

PHP创建具有不同排序字段的数组
EN

Stack Overflow用户
提问于 2013-02-03 20:01:57
回答 2查看 147关注 0票数 1

首先,感谢堆栈溢出提供这个平台和您,给一个新手一个帮助;-)

现在..。我有两个表:页和节都有自己的id。一个页面有一个或多个部分。一个部分正好属于1页。两个id的列表序列在不同的字段中处理。

我读取了两个表并创建了一个(未排序的)数组。我最后需要的是一个排序列表,如下所示,将page_id和节_id按正确的顺序排列。

这里有一个检索数据后的污点示例:

代码语言:javascript
复制
myArr[] = array( page_id=>2,  section_id=>2,  parent_id=>0, level=>0, page_seq=>1, section_seq=>2, page_title=>p1 );
myArr[] = array( page_id=>2,  section_id=>9,  parent_id=>0, level=>0, page_seq=>1, section_seq=>1, page_title=>p1 );
myArr[] = array( page_id=>3,  section_id=>3,  parent_id=>0, level=>0, page_seq=>2, section_seq=>1, page_title=>p2 );
myArr[] = array( page_id=>4,  section_id=>4,  parent_id=>0, level=>0, page_seq=>3, section_seq=>1, page_title=>p3 );
myArr[] = array( page_id=>5,  section_id=>5,  parent_id=>3, level=>1, page_seq=>3, section_seq=>1, page_title=>p2-3 );
myArr[] = array( page_id=>6,  section_id=>6,  parent_id=>3, level=>1, page_seq=>2, section_seq=>1, page_title=>p2-2 );
myArr[] = array( page_id=>7,  section_id=>7,  parent_id=>4, level=>1, page_seq=>1, section_seq=>1, page_title=>p3-1 );
myArr[] = array( page_id=>8,  section_id=>8,  parent_id=>7, level=>2, page_seq=>1, section_seq=>1, page_title=>p3-1-1 );
myArr[] = array( page_id=>9,  section_id=>10, parent_id=>5, level=>2, page_seq=>1, section_seq=>1, page_title=>p2-1-1 );
myArr[] = array( page_id=>9,  section_id=>11, parent_id=>5, level=>2, page_seq=>1, section_seq=>2, page_title=>p2-1-1 );
myArr[] = array( page_id=>10, section_id=>12, parent_id=>3, level=>1, page_seq=>1, section_seq=>1, page_title=>p2-1 );

我的问题是分类。

  • section_seq是页面中部分的序列。
  • page_seq是同一父级的页面序列。

我已经在这里找到了一些令人厌恶的循环例子,但是--说实话--我无法使它们适应我的需要。我需要一个反应循环吗?

我的数组的关键应该是什么: section_id,因为它在所有页面上都是唯一的?如何做正确的排序?

请注意:不幸的是,页面标题不能像上面的例子那样用于排序;-)因为它是自由文本.

所以我需要的是:

  • 阅读第一页(1)的0级和page_seq =1
  • 读取具有1级-if的第一页(2) --其中页(1)为父页,page_seq =1
  • 读取具有2级-if的第一页(3) --其中页(2)为父页,page_seq =1
  • ..。只要不存在更深的层次,就继续
  • 阅读具有二级-if存在的第二页(4) --以页(2)为父页,page_seq =1
  • ..。继续,只要不存在更深的级别,并且在此级别上也不再有页(2)作为父级。
  • 阅读具有1级-if存在的第二页(5),其中页(1)为父页,page_seq =1
  • ..。继续,只要不存在更深的级别,并且在此级别上也不再有页(5)作为父级。
  • 阅读第二页(6),级别为0,page_seq =2
  • 诸若此类。

有什么有力的帮助和想法吗?

预先谢谢沃尔夫冈

EN

回答 2

Stack Overflow用户

发布于 2013-02-03 23:43:06

我的想法是使用数据库进行排序。使用MySQL,您可以在两个表上使用左联接来获取一个结果表中的节和页数据。在查询中,可以使用ORDER关键字指定必须对结果排序的列。

票数 0
EN

Stack Overflow用户

发布于 2013-02-10 21:54:36

所以我终于找到了一个解决办法

1)创建要处理的所有页面的列表。$key生成的外观在第一级(如"1“)、在第2层(如"1.1”)、在第3层(如"1.1.1“)等。

代码语言:javascript
复制
read all pages
while ( $fetch_obj_pages = $obj_pages->fetchRow() ):
    // do some validations and keep only those in mind which should be processed
    ....

    // get and save key for sorting
    if ( $isValid == TRUE ):
        $key = '';
        if ( array_key_exists ( $fetch_obj_pages[ 'parent_id' ],  $pageSortList ) == TRUE ):
            $key = $pageSortList[ $fetch_obj_pages[ 'parent_id' ]] . '.';
        endif;
        $key .= $fetch_obj_pages[ 'page_seq' ];
        $pageSortList[ $fetch_obj_pages[ 'page_id' ]] = $key;
     endif;
endwhile;

2)创建要处理的所有区段的列表。该方法以页面列表中生成的密钥为例,用节排序序列对其进行增强,并将其按section_id保存为密钥。

代码语言:javascript
复制
read all sections
while ( $fetch_obj_sections = $obj_sections->fetchRow() ):
    // do some validations and keep only those in mind which should be processed
    ....

    // get and save key for sorting
    if ( $isValid == TRUE ):
        // get key from page and save key for section
        $key = '';
        if ( array_key_exists ( $fetch_obj_sections[ 'page_id' ],  $pageSortList ) == TRUE ):
            $key = $pageSortList[ $fetch_obj_sections[ 'page_id' ]] . '-';
        endif;
        $key .= $fetch_obj_sections[ section_seq ];
        $sectionSortList[ $fetch_obj_sections[ 'section_id' ]] = $key;
    endif;
endwhile;

( 3)分段列表排序( $sectionSortList );

4)通过在$sectionSortList上循环生成结果,并获取section_id作为该列表中的键所必需的数据。

在有人问之前:当然,所有可能的过滤器都是在SQL中完成的。但有些是不可能的,因为需要在一个循环中完成-

最有可能的是,步骤1)和步骤2)可以在一个步骤中使用一个联接和一个适当的顺序来完成。

最后一位-节省-呆子将发现许多地方的代码优化和减少。但是,我喜欢与:和endif;;-)的替代功能。)

如果有人看到了让事情变得更快的可能性,欢迎你提供你的想法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14676679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档