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 );
  • 相关阅读:
    RFID亮灯电子标签在仓储管理中的应用
    漫画:寻找股票买入卖出的最佳时机(动态规划)
    JAVA深入解析-36个话题-Two
    一行代码让训练速度提升2倍,飞桨自动混合精度技术详解
    追源码的平凡之路
    看完这篇,你也是字符编码大神!
    微服务的熔断原理与实现
    经典论文复现 | PyraNet:基于特征金字塔网络的人体姿态估计
    一文看懂人机对话
    「Spring Boot 2.4 新特性」一键构建Docker镜像
  • 原文地址:https://www.cnblogs.com/iaknehc/p/7040691.html
Copyright © 2011-2022 走看看