PHP处理二维数组合并 时间复杂度O(n)

 一直没怎么写博客,感觉很多东西都遗忘, 在写ArrayAccess同时把时间复杂度温习下 ,这篇博客给大家说说关于PHP预定义接口中常用到的重量级人物: ArrayAccess。大家也许会问,最基本、最常用的预定义接口有6个呢,为啥非得说这个。从日常的使用情况来看:这个出现的频率非常高,特别是在框架中,比如Laravel、Slim等都会用到,并且用得非常经典,让人佩服啊。从技术上说:说实话其他的我用的少啊!只是知道简单的用法,对他的理解比较浅显,不敢在这里误导大家,哈哈!今天我要写的内容也不一定都正确,不对之处还请指正。

ArrayAccess

  先说 ArrayAccess 吧!ArrayAccess 的作用是使得你的对象可以像数组一样可以被访问。应该说 ArrayAccess 在PHP5中才开始有的,PHP5中加入了很多新的特性,当然也使类的重载也加强了,PHP5 中添加了一系列接口,这些接口和实现的 Class 统称为 SPL。

ArrayAccess 这个接口定义了4个必须要实现的方法:

1 {
2    abstract public offsetExists ($offset)  //检查偏移位置是否存在
3    abstract public offsetGet ($offset)     //获取一个偏移位置的值
4    abstract public void offsetSet ($offset ,$value) //设置一个偏移位置的值
5    abstract public void offsetUnset ($offset)       //复位一个偏移位置的值
6 }

所以我们要使用ArrayAccess这个接口,就要实现相应的方法,

class obj implements ArrayAccess{    private $container;

public function __construct($data)    {        $this->container = $data;    }

public function offsetExists($offset)    {        // TODO: Implement offsetExists() method.        $arrKey = array_search($offset, array_column($this->container, ‘bookId‘));        return $arrKey;

}

public function offsetSet($offset, $value)    {        $arrKey=$this->offsetExists($offset);        if($arrKey!==false){            // TODO: Implement offsetSet() method.            $this->offsetUnset($arrKey);            $this->container[$arrKey] = array_merge($this->container[$arrKey], $value);        }    }

public function offsetGet($offset)    {        // TODO: Implement offsetGet() method.        return $this->container;    }

public function offsetUnset($offset)    {        unset($this->container[$offset][‘bookId‘]);        // TODO: Implement offsetUnset() method.    }

}

$bookBaseInfo = [    [‘bookId‘ => 1, ‘name‘ => ‘程序员修炼之道‘],    [‘bookId‘ => 2, ‘name‘ => ‘择天记‘],    [‘bookId‘ => 3, ‘name‘ => ‘PHP核心‘],];$bookUpdateTime = [    [‘bookId‘ => 3, ‘timestamp‘ => 11],    [‘bookId‘ => 2, ‘timestamp‘ => 22],];$obj = new obj($bookBaseInfo);foreach ($bookUpdateTime as $key => $value) {        $obj[$value[‘bookId‘]]=$value;}var_dump($obj[‘bookId‘]);die;

这个示例里面只用一层循环 ,所以时间事件复杂度是O(n);



原文地址:https://www.cnblogs.com/friendwrite/p/10335479.html

时间: 2024-07-31 16:26:23

PHP处理二维数组合并 时间复杂度O(n)的相关文章

PHP二维数组合并,根据某个key合并

/** *PHP二维数组合并,根据某个key合并 * @param type $v 要传入的组合阵列 * @param type $keyname 对应的KEY名称. * @param type $valname 要写入的值KEY名称 * @param type $s 重组译的阵例.预设空值. */ function test($v,$keyname,$valname,$s=Array()){ foreach($v AS $_k => $d){ $s[$d[$keyname]][$valname

将一个二维数组合并成一个一维数组

大家都知道php有内置的数组合并函数array_merage($arr,$arr1,$arr2,$arr3);那如何把一个二维数组如array(array('a'=>1,'b'=>2),array('c'=>3,'d'=>4)) 合并成如下的数组 array('a'=>1,'b'=>2,'c'=>3,'d'=>4);似乎,php目前还没有这样的内置函数吧,于是自己动手写了两种方法,仅供大家参考 第一种.方法当然是递归法呢,代码如下 <?php $new

PHP 二维数组合并(二)

例如有如下数组: $arr = array( 0=>array( 'product'=>'120', 'type'=>0 ), 1=>array( 'product'=>'120', 'type'=>0 ), 2=>array( 'product'=>'120', 'type'=>1 ), 3=>array( 'product'=>'121', 'type'=>0 ), 4=>array( 'product'=>'121'

合并二维数组,并计算重复字段的平均值

1 <?php 2 $arrs = Array ( 3 Array ( 'rname' => '小麦', 'm1'=> 12.00 ,'m2'=> 33,'qq'=> 33 ) , 4 Array ( 'rname' => '小麦', 'm1' => 23.00,'m2'=> 44,'qq'=> 11 ) , 5 Array ( 'rname' => 'ccc', 'm1' => 11,'m2'=> 22,'qq'=> 12 )

php数组根据某键值,把相同键值的合并最终生成一个新的二维数组

要处理的PHP数组: $infos = array(         array(         'gid' => 36,         'name' => '高二佳木斯',                  'start_time' => '2015-08-28 00:00:00',                    'pic' => '2015/08/438488a00b3219929282e3652061c2e3.png'                       

环形二维数组最大子数组的和

设计思路: 因为之前做过二维数组的和环形一维数组的,所以第一感觉就是能不能把这两种整改一下结合起来,所以采用的做法就是将二维环形变化为一维环形,在此采用的方法是从第一行开始,第一行计算出最大子数组,然后第一行和第二行相加为一维计算最大子数组,然后第一行.第二行和第三行,以此类推,最后将各子数组的最大值进行比较,得到最大的即为子数组和的最大值. 实验代码: //环形一维数组求最大子数组 package erwei; public class oneArray { private int i; pu

二维数组环形打印,亲自调试

/*先把数据按照打印格式打印到二维数组中,然后输出二维数组即可 *时间复杂度 O(N*M) *空间复杂度O(N*M) */ #include<stdio.h> #include<string.h> #include<stdlib.h> int input(void); void contral(int **arry,int col,int row); void set_value(int**a,int col,int row, int start); void prin

php二位数组合并

转自:http://www.cnblogs.com/losesea/archive/2013/06/14/3134900.html 题目:有以下2个二维数组 1$a=Array(0 => Array(id => 66,class_name => www.iiwnet.com),1 => Array(id => 67,class_name => linux ));2$b=Array(0 => Array(class_count=> 8),1 => Arr

数组合并函数,二维数组相同字段合并到一起。

一般从数据库中提取数据时,会遇到各种各样类型的数据,要求也不尽相同.自己这两天开发的时候遇到一个很纠结的问题,如下: 比如一个二维数组是这样的: Array ( [0] => Array ( [uid] => 231 [username] => 123456 [active] =>aaaa [transfer] =>1111 ) [1] => Array ( [uid] => 231 [username] =>123456 [active] => bb