二维数组排序-搜索-增删改查-多维数组递归

1. 二维数组排序-搜索-增删改查

  1. // 二维数组排序-搜索-增删改查
  2. $arrs = [
  3. ['id' => 3, 'num' => 11, 'title' => 'css'],
  4. ['id' => 2, 'num' => 14, 'title' => 'html'],
  5. ['id' => 4, 'num' => 12, 'title' => 'javascript'],
  6. ['id' => 1, 'num' => 13, 'title' => 'hello world!'],
  7. ];
  8. $new = ['id' => 5, 'num' => 15, 'title' => 'hello php!'];
  9. // 1. 新增
  10. array_push($arrs, $new);
  11. /* Array (
  12. [0] => Array ( [id] => 3 [num] => 11 [title] => css )
  13. [1] => Array ( [id] => 2 [num] => 14 [title] => html )
  14. [2] => Array ( [id] => 4 [num] => 12 [title] => javascript )
  15. [3] => Array ( [id] => 1 [num] => 13 [title] => hello world! )
  16. [4] => Array ( [id] => 5 [num] => 15 [title] => hello php! )
  17. )
  18. */
  19. echo print_r($arrs, true), '<br>';
  20. // 2. 降序
  21. array_multisort($arrs, SORT_DESC, array_column($arrs, 'id'));
  22. /* Array (
  23. [0] => Array ( [id] => 5 [num] => 15 [title] => hello php! )
  24. [1] => Array ( [id] => 4 [num] => 12 [title] => javascript )
  25. [2] => Array ( [id] => 3 [num] => 11 [title] => css )
  26. [3] => Array ( [id] => 2 [num] => 14 [title] => html )
  27. [4] => Array ( [id] => 1 [num] => 13 [title] => hello world! )
  28. )
  29. */
  30. echo print_r($arrs, true), '<br>';
  31. // 3. 求和
  32. // 逐行 id * num 求和
  33. $sum = array_reduce($arrs, function ($prev, $next) {
  34. return $prev + $next['id'] * $next['num'];
  35. });
  36. // 197
  37. echo print_r($sum, true), '<br>';
  38. // 4. 查找
  39. // 查找 id = 2 记录
  40. $arr = array_filter($arrs, function ($item) {
  41. return $item['id'] === 2;
  42. });
  43. // Array ( [3] => Array ( [id] => 2 [num] => 14 [title] => html ) )
  44. echo print_r($arr, true), '<br>';
  45. // 5. 搜索
  46. // 搜索 title 包含 hello 的记录
  47. $arr = array_filter($arrs, function ($item) {
  48. return false !== stripos($item['title'], 'hello');
  49. });
  50. /* Array (
  51. [0] => Array ( [id] => 5 [num] => 15 [title] => hello php! )
  52. [4] => Array ( [id] => 1 [num] => 13 [title] => hello world! )
  53. )
  54. */
  55. echo print_r($arr, true), '<br>';
  56. // 6. 删除
  57. $ids = [3, 5];
  58. // 删除指定 $ids 中的全部记录
  59. $arrs = array_diff_assoc($arrs, array_filter($arrs, function($item) use ($ids) {
  60. return in_array($item['id'], $ids);
  61. }));
  62. /* Array (
  63. [1] => Array ( [id] => 4 [num] => 12 [title] => javascript )
  64. [3] => Array ( [id] => 2 [num] => 14 [title] => html )
  65. [4] => Array ( [id] => 1 [num] => 13 [title] => hello world! )
  66. )
  67. */
  68. echo print_r($arrs, true), '<br>';
  69. // 7. 修改
  70. $id = 1;
  71. // 修改指定 $id 记录的 title 为 hello php!
  72. $arrs = array_map(function($item) use ($id) {
  73. if ($id === $item['id']) $item['title'] = 'hello php!';
  74. return $item;
  75. }, $arrs);
  76. /* Array (
  77. [1] => Array ( [id] => 4 [num] => 12 [title] => javascript )
  78. [3] => Array ( [id] => 2 [num] => 14 [title] => html )
  79. [4] => Array ( [id] => 1 [num] => 13 [title] => hello php! )
  80. )
  81. */
  82. echo print_r($arrs, true), '<br>';

2. 多维数组自定义递归函数

  1. // 多维数组,键合并
  2. function array_merge_multi(...$args) {
  3. $array = array();
  4. foreach ( $args as $arg ) {
  5. if ( is_array( $arg ) ) {
  6. foreach ( $arg as $k => $v ) {
  7. if ( is_array( $v ) ) {
  8. $array[$k] = isset( $array[$k] ) ? $array[$k] : array();
  9. $array[$k] = array_merge_multi( $array[$k], $v );
  10. } else {
  11. $array[$k] = $v;
  12. }
  13. }
  14. }
  15. }
  16. return $array;
  17. }
  18. // 多维数值,删除值
  19. function array_remove_value( &$arr, $var ) {
  20. foreach ( $arr as $key => $value ) {
  21. if ( is_array( $value ) ) {
  22. array_remove_value( $arr[$key], $var );
  23. } else {
  24. $value = trim( $value );
  25. if ( $value == $var ) {
  26. unset( $arr[$key] );
  27. } else {
  28. $arr[$key] = $value;
  29. }
  30. }
  31. }
  32. }
  33. // 多维数组,判断值
  34. function deep_in_array( $value, $array ) {
  35. foreach( $array as $item ) {
  36. if ( !is_array( $item ) ) {
  37. if ( $item == $value ) {
  38. return true;
  39. } else {
  40. continue;
  41. }
  42. }
  43. if ( in_array( $value, $item ) ) {
  44. return true;
  45. } else if ( deep_in_array( $value, $item ) ) {
  46. return true;
  47. }
  48. }
  49. return false;
  50. }
  51. // 多维数组,搜索键
  52. function array_search_key( $needle, $haystack ) {
  53. global $nodes_found;
  54. foreach( $haystack as $key1 => $value1 ) {
  55. if ( $key1 === $needle ) {
  56. $nodes_found[] = $value1;
  57. }
  58. if ( is_array( $value1 ) ) {
  59. array_search_key( $needle, $value1 );
  60. }
  61. }
  62. return $nodes_found;
  63. }
  64. // 多维数组,搜索值
  65. function array_search_re( $needle, $haystack, $a = 0, $nodes_temp = array() ) {
  66. global $nodes_found;
  67. $a++;
  68. foreach( $haystack as $key1 => $value1 ) {
  69. $nodes_temp[$a] = $key1;
  70. if ( is_array( $value1 ) ) {
  71. array_search_re( $needle, $value1, $a, $nodes_temp );
  72. } else if ( $value1 === $needle ) {
  73. $nodes_found[] = $nodes_temp;
  74. }
  75. }
  76. return $nodes_found;
  77. }

更多相关文章

  1. PHP 将一位数组进行倒序排列
  2. Jenkins Tips 002: 处理Shell返回字符串为数组
  3. php常用数组函数
  4. 3-12(队列的结束以及树的开始)
  5. php数据类型的转换与检测、变量的基础知识
  6. JDK9对String字符串的新一轮优化,不可不知
  7. php的初步认识与常用数据类型
  8. 我的第38个代码
  9. shell脚本中数组常用操作

随机推荐

  1. C#怎么将 HTML转换为图片或 PDF?
  2. C#开发微信门户及应用(一)之微信接口的如
  3. Enum扩展特性实例代码
  4. C#中关于扩展方法的实例分析
  5. 详细介绍一个.net开源权限管理系统
  6. 总结一些编码和设计原则实例
  7. C#中如何格式化json字符串的方法分析
  8. ASP.NET Core 应用程序发布命令实例
  9. 分享在C#中时间戳是怎么转换的?
  10. 如何使用C#来制作扫雷游戏的图文代码教程