php 两两相乘,php - 数据两两比较的高效算法?

ringa_lee2017-04-10 17:31:452楼

先排序,后比较

不建议在数据库中操作,最方便的就是把这10w 条数据取出来,放到 php 内存中来操作.

代码如下

$sql = "select id,data from table order by data asc";

$result = [

0=> ['id'=>3, 'data'=>1],

1=> ['id'=>1, 'data'=>2],

2=> ['id'=>4, 'data'=>2],

3=> ['id'=>5, 'data'=>2],

4=> ['id'=>2, 'data'=>5],

];

//遍历小于

//小于当前元素下标的元素

//遍历大于

//大于当前元素下标的元素

//相同,有点复杂,代码如下

$same = array();

$current = 0;

$next = $current + 1;

//遍历一遍数组

while(isset($result[ $next ])) {

$data = $result[ $current ][ 'data' ];

//如果当前元素值和下一个元素值一样,放到值数组中

if ($data == $result[ $next ][ 'data' ]) {

$same[ $data ][] = $result[ $next ];

$next ++;

}else{ //如果不一样,当前元素指向 当下标为$next的元素

$current = $next;

$next = $current+1;

}

}

var_export($same);

//结果

array (

2 =>

array (

0 =>

array (

'id' => 4,

'data' => 2,

),

1 =>

array (

'id' => 5,

'data' => 2,

),

),

)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值