zoukankan      html  css  js  c++  java
  • php中使用array_slice将数组中的元素分类

     1 <?php
     2 
     3 //将属于同一个类型的文章划分到同一张卡片上展示,并且保证同一张卡片上的文章在时间上连续
     4 //可以先按照时间倒序取出来将文章放到同一个数组中
     5 //假设下面的数组是按照时间倒序取出来的各篇文章的类型
     6 
     7 $article_list = ['科技','生活','互联网','互联网','大数据','人工智能','人工智能','人工智能','科技','科技','大数据','自动驾驶'];
     8 
     9 //由于文章已经在时间上连续了,所以只要前一篇和后一篇是不同类型的就可以分别放在两张卡片上,可以将数组分割.
    10 //这样就可以确定有几张卡片
    11 
    12 $length = count($article_list);
    13 $cut_node = array();
    14 for($i=0;$i<$length-1;$i++){
    15     if($article_list[$i] != $article_list[$i+1]){
    16         $cut_node[] = $i+1;   //如果后面的文章与前面一篇类型不同就在改点切割一下数组
    17     }
    18 }
    19 
    20 //将$cut_node数组的开头元素后结尾元素补齐,中间的每个元素都是切割点
    21 $start_node = 0;
    22 $end_node = $length;
    23 array_unshift($cut_node,$start_node);
    24 array_push($cut_node,$length);
    25 $card = array();
    26 for($i=0;$i<(count($cut_node)-1);$i++){
    27     $offset = $cut_node[$i];  //切割时的偏移量
    28     $leng = $cut_node[$i+1]-$offset;  //切割长度
    29     $card[] = array_slice($article_list,$offset,$leng);
    30 }
    31 //将所有的文章分到8张卡片中
    32 print_r($card);
    33 
    34 //分类后的结果如下
    35 Array (
    36 [0] => Array ( [0] => 科技 ),
    37 [1] => Array ( [0] => 生活 ),
    38 [2] => Array ( [0] => 互联网, [1] => 互联网 ),
    39 [3] => Array ( [0] => 大数据 ),
    40 [4] => Array ( [0] => 人工智能 ,[1] => 人工智能, [2] => 人工智能 ),
    41 [5] => Array ( [0] => 科技 ,[1] => 科技 ) ,
    42 [6] => Array ( [0] => 大数据 ) ,
    43 [7] => Array ( [0] => 自动驾驶 )
    44 );
  • 相关阅读:
    react路由组件&&非路由组件
    react函数式组件(非路由组件)实现路由跳转
    react使用antd组件递归实现左侧菜单导航树
    【LeetCode】65. Valid Number
    【LeetCode】66. Plus One (2 solutions)
    【LeetCode】68. Text Justification
    【LeetCode】69. Sqrt(x) (2 solutions)
    【LeetCode】72. Edit Distance
    【LeetCode】73. Set Matrix Zeroes (2 solutions)
    【LeetCode】76. Minimum Window Substring
  • 原文地址:https://www.cnblogs.com/iaknehc/p/7040691.html
Copyright © 2011-2022 走看看