经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » PHP » 查看文章
PHP将一个二维数组对半切割成一个新的二维数组
来源:cnblogs  作者:在斑马线上散布  时间:2021/1/18 16:37:36  对本文有异议

需求:因为之前的帖子列表,是一行放一个,所以直接一个循环即可。现在新增加了一个模块,这个模块的帖子列表样式是一行放两个,本来想让前端做成自适应,这样就可以共用一个数组list的,但是由于历史版本是使用的table标签,所以最后还是需要改下列表的数据结构。

具体问题点:如下截图,就是对一个二维数组按片段拆分,并且按添加指定后缀进行合并,成一个新数组

 

 会遇到的问题:拆分与合并中,主要是对于二维数组,如果是单数,就会导致后一般(加_s后缀的一段不全),这里对于二维数组如果只有 1个,2个,或是超过2个以上的并且是单数和的,这三种做特殊对待,其他的直接按规则处理。

最后代码如下:直接传入需要处理的二维数组,最后方法返回处理后的数组

  1. /**
  2. * 将一个二维数组对半切切开拼接成一个新的数组
  3. * 如数组[[1],[2],[3],[4],[5]]对切割成[[1,2],[3.4][5]]
  4. * @param [type] $threaddb
  5. * @return void
  6. */
  7. function splitInHalfArray($threaddb){
  8. $threaddb_new = [];//定义一个,最内层数组收集器
  9. $threaddb_new_web = [];//定义一个,最终数组收集器
  10. $threaddb_new_web_tail = [];//定义一个,$threaddb数组个数超过2的尾巴收集器
  11. $threaddb_count = count($threaddb);
  12. switch($threaddb_count){
  13. case 1://帖子只有一个
  14. foreach(current($threaddb) as $key => $value){//格式化二维数组键名,去掉第一次键名
  15. $threaddb_new[$key] = $value;
  16. }
  17. $threaddb_new_web[] = $threaddb_new;
  18. break;
  19. case 2://帖子有二个
  20. $threaddb_new = current($threaddb);//获取第一个数组,直接追加
  21. //获取最后一个数组,新增键名后缀'_s'后,再次追加
  22. foreach(end($threaddb) as $key => $value){
  23. $threaddb_new[$key.'_s'] = $value;
  24. }
  25. $threaddb_new_web[0] = $threaddb_new;
  26. break;
  27. default://帖子有三个(含三)个以上
  28. $n = 0;
  29. foreach($threaddb as $key => $value){
  30. $n ++;
  31. if($n % 2 != 0){//单数第一个,直接追加
  32. foreach($value as $key_s => $value_s){
  33. $threaddb_new[$key_s] = $value_s;
  34. }
  35. }else{//双数第二个,新增键名后缀'_s'后,再次追加
  36. foreach($value as $key_s => $value_s){
  37. $threaddb_new[$key_s.'_s'] = $value_s;
  38. }
  39. }
  40. if($n % 2 == 0){//每循环两次,将拼接的数组,追加到新的数组中
  41. $threaddb_new_web[] = $threaddb_new;
  42. }elseif($n == $threaddb_count && $n % 2 != 0){//如果是$threaddb的最后一个数组 并且 $threaddb数组个数是单数
  43. foreach(end($threaddb) as $key => $value){
  44. $threaddb_new_web_tail[$key] = $value;
  45. }
  46. $threaddb_new_web[] = $threaddb_new_web_tail;
  47. }
  48. }
  49. }
  50. return $threaddb_new_web;
  51. }

写在最后,上面数组截图,就是处理之后的。当然,如果二维数组是单数,就是如下,最后一个只有前半,因为后一般已经没有数据了。

 

 

原文链接:http://www.cnblogs.com/camg/p/14271635.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号