背景:现在有一个多维数组,该数组里面的部分一维数组key值是完全一样的,现将一样的数组提取出来,用于做列表展示。

封装方法:

 function arrClassify($arr){
$data = array();
$a = 0;
while ($arr){
$key = $arr[0];
$data[$a]['query'] = '第'.$a.'类';
$data[$a]['head'] = array_keys($key);
$data[$a]['value'][] = $key;
unset($arr[0]);
$i = 1;
while($i <= count($arr)){
$result=array_diff_key($arr[$i],$key);
if(!$result){
$data[$a]['value'][] = $arr[$i];
unset($arr[$i]);
}
$i++;
}
$arr = array_values($arr);
$a++;
}
return $data;
}

封装的方法

示例:

 <?php
$arr = array(
array(
'a' => 1,
'b' => 1,
'c' => 1,
'd' => 1,
),
array(
'e' => 1,
'd' => 1,
'f' => 1,
'g' => 1,
),
array(
'a' => 2,
'b' => 2,
'c' => 2,
'd' => 2,
),
array(
'e' => 2,
'd' => 2,
'f' => 2,
'g' => 2,
),
array(
'e' => 2,
'd' => 2,
'f' => 2,
'g' => 2,
'h' => 2,
),
array(
'e' => 2,
'd' => 3,
'f' => 9,
'g' => 2,
'h' => 3,
),
);
$a = arrClassify($arr);
var_dump($a);

测试用例

运行结果:

测试结果

 array (size=3)
0 =>
array (size=3)
'query' => string '第0类' (length=7)
'head' =>
array (size=4)
0 => string 'a' (length=1)
1 => string 'b' (length=1)
2 => string 'c' (length=1)
3 => string 'd' (length=1)
'value' =>
array (size=2)
0 =>
array (size=4)
'a' => int 1
'b' => int 1
'c' => int 1
'd' => int 1
1 =>
array (size=4)
'a' => int 2
'b' => int 2
'c' => int 2
'd' => int 2
1 =>
array (size=3)
'query' => string '第1类' (length=7)
'head' =>
array (size=4)
0 => string 'e' (length=1)
1 => string 'd' (length=1)
2 => string 'f' (length=1)
3 => string 'g' (length=1)
'value' =>
array (size=2)
0 =>
array (size=4)
'e' => int 1
'd' => int 1
'f' => int 1
'g' => int 1
1 =>
array (size=4)
'e' => int 2
'd' => int 2
'f' => int 2
'g' => int 2
2 =>
array (size=3)
'query' => string '第2类' (length=7)
'head' =>
array (size=5)
0 => string 'e' (length=1)
1 => string 'd' (length=1)
2 => string 'f' (length=1)
3 => string 'g' (length=1)
4 => string 'h' (length=1)
'value' =>
array (size=2)
0 =>
array (size=5)
'e' => int 2
'd' => int 2
'f' => int 2
'g' => int 2
'h' => int 2
1 =>
array (size=5)
'e' => int 2
'd' => int 3
'f' => int 9
'g' => int 2
'h' => int 3

php 多维数组按键值分类的更多相关文章

  1. implode函数的升级版,将一个多维数组的值转化为字符串

    /** * implode函数的升级版 * 将一个多维数组的值转化为字符串 * @param $glue * @param $data * @return string */function mult ...

  2. 抓取二维数组某值出来,到一维数组---array_column

    /*** * '抓取二维数组某值出来,到一维数组' * @param $arr * @param $item * @return array */ function get_arr_item_val( ...

  3. php 二维数组根据值进行排序

    // 先获取要排序的值 $createTime = array_column($data, 'create_time'); // 排序成功 array_multisort($createTime, S ...

  4. php 二维数组相同值 相加

    array(3) { [0]=> array(2) { ["sourcesid"]=> int(1) ["addusernum"]=> str ...

  5. golang 算法题 : 二维数组搜索值

    package mainimport "fmt"func main() { matrix := [][]int{ {1, 4, 7, 11, 15}, {2, 5, 8, 12, ...

  6. 二维数组去除重复值和array_unique函数

    今天遇到了一个问题,就是从数据库中去除的数组为一个二维数组,现在就是想将二位数组进行去重,但是在php中,对于一个一维数组,我们可以直接使用php的系统函数array_unique,但是这个函数不能对 ...

  7. php 计算多维数组中所有值的总和

    php 内置函数 array_sum() 函数返回数组中所有值的总和,只能返回一维数组的总和: 计算多维数组所有值的和就要自定义函数了: function get_sum($array) { $num ...

  8. 如何通过numpy获得二维或多维数组的最大、小值索引

    虽然numpy数组中有argmax的函数可以获得数组的最大值的索引,但该函数获得的是numpy数组平铺后的索引,也就是一维索引.那么要怎样才能获得二维索引呢?实现很简单,比如我下面的代码: impor ...

  9. php二维数组去除重复值

    <?php //二维数组 $test["aa"] = array("id"=>"17","name"=> ...

随机推荐

  1. sysfs: cannot create duplicate filename '/class/spi_master/spi1'

    在编写SPI驱动程序的时候,遇到如下问题 s3c2410-spi s3c2410-spi.0: master is unqueued, this is deprecated ------------[ ...

  2. Celery-4.1 用户指南: Security (安全)

    简介 虽然Celery 编写的时候考虑了安全,但是它仍然应该认为是一个不安全的组件. 依据安全策略,你可以采取几个步骤使得你的 Celery 安装更加安全. 关注的领域 消息中间件 保障消息中间件不受 ...

  3. HTML5实用知识点

    本文讲解HTML5实用知识点 新增的表单type Canvas使用 SVG使用 Audio使用 Video使用 网页缓存 文件缓存 后台worker Server-Sent Events 定位 拖放功 ...

  4. Excel向数据库插入数据(执行一次只需连接一次)-batch简单使用

    由于前端时间向数据库插入excel中的数据时,每插入一条数据,就得连接一次数据库:后来发现这种做法不好,如果excel中有很多条数据,就得连接很多次数据库,这样就很浪费资源而且不安全,有时数据库也会报 ...

  5. 用JS写一个简单的程序,算出100中7的倍数的最大值

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. maven 本地jar包依赖生成

    转载自:http://www.cnblogs.com/wuyouwulv/p/maven_configure_oracle_jdbc.html 由于Oracle授权问题,Maven不提供Oracle ...

  7. 关于handler的再次讨论

    主要有两个问题,post方法和sendmessage方法有什么不同? 同一个handler对象发送的message只能发送给自己吗? 问题1: post方法,对于Handler的Post方式来说,它会 ...

  8. VS调试程序时,程序出现异常,但VS不报错的解决方案

    在调试>异常> 里面把勾全勾上就行了!

  9. 1-3 分布式系统的瓶颈以及zk的相关特性

  10. Luogu 3586 [POI2015]LOG

    考虑离散化后开权值线段树. 设序列中不小于$s$的数有$cnt$个,小于$s$的数的和为$sum$. 那么操作Z能成功的充要条件是$sum \geq (c - cnt) * s$. 如果序列中不小于$ ...